首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我使用字符串和带有开始和结束日期的结构化搜索的组合会得到很长的响应时间?

为什么我使用字符串和带有开始和结束日期的结构化搜索的组合会得到很长的响应时间?
EN

Stack Overflow用户
提问于 2021-09-30 06:55:29
回答 2查看 62关注 0票数 1

《MarkLogic Search开发人员指南》讨论了如何组合使用字符串查询和结构化查询,在这些查询中,请求被ANDed在一起。我有一个由31个术语组成的字符串查询和一个由索引开始日期字段组成的结构化查询。搜索在不到20秒的时间内完成。以下是参数映射的转储:

代码语言:javascript
复制
2021-09-24 22: 49: 13.306 Info: resource.xqy paramMap: {
    "pageLength": 10,
    "q": "(T1 OR \"T2\" OR \"T3\" OR \"e-T4\" OR \"T5\" OR 
    \"T6\" OR \"T7\" OR \"T8\" OR \"T9\" OR \"T10\" OR
    \"T11\" OR \"T12\" OR \"T13\" OR \"T14\" OR \"T15\" OR 
    \"T16\" OR \"T17\" OR \"T18\" OR \"T19\" OR \"T20\" OR 
    \"T21\" OR \"T22\" OR \"T23\" OR \"T24\" OR \"T25\" OR 
    \"T26\" OR \"T27\" OR \"T28\" OR \"T29\" OR \"T30\" OR \"T31\")",
    "format": "json",
    "options": "all",
    "structuredQuery": "{
        \"query\":{
            \"queries\":[
                {
                    \"and-query\":{
                        \"queries\":[
                            {
                                \"and-query\":{
                                    \"queries\":[]
                                }
                            },
                            {
                                \"range-query\":{
                                    \"range-operator\":\"GE\",
                                    \"value\":[\"2000-09-10T04:00:00.000Z\"],
                                    \"range-option\":[],
                                    \"json-property\":\"primarydate\",
                                    \"type\":\"xs:dateTime\"
                                }
                            }
                        ]
                    }
                },
                {
                    \"operator-state\":{
                        \"operator-name\":\"results\",
                        \"state-name\":\"highlight\"
                    }
                }
            ]
        }
    }",
    "start": 1
}

但是,如果我添加一个比较的结束日期,搜索需要超过5分钟才能完成。以下是修改后的参数映射:

代码语言:javascript
复制
2021-09-24 22: 57: 44.930 Info: resource.xqy paramMap: {
    "pageLength": 10,
    "q": "(T1 OR \"T2\" OR \"T3\" OR \"e-T4\" OR \"T5\" OR 
            \"T6\" OR \"T7\" OR \"T8\" OR \"T9\" OR \"T10\" OR
            \"T11\" OR \"T12\" OR \"T13\" OR \"T14\" OR \"T15\" OR 
            \"T16\" OR \"T17\" OR \"T18\" OR \"T19\" OR \"T20\" OR 
            \"T21\" OR \"T22\" OR \"T23\" OR \"T24\" OR \"T25\" OR 
            \"T26\" OR \"T27\" OR \"T28\" OR \"T29\" OR \"T30\" OR \"T31\")",
    "format": "json",
    "options": "all",
    "structuredQuery": "{
        \"query\":{
            \"queries\":[
                {
                    \"and-query\":{
                        \"queries\":[
                            {
                                \"and-query\":{
                                    \"queries\":[]
                                }
                            },
                            {
                                \"and-query\":
                                {
                                    \"queries\":
                                    [
                                        {
                                            \"range-query\":
                                            {
                                                \"range-operator\":\"GE\",
                                                \"value\":[\"2000-09-10T04:00:00.000Z\"],
                                                \"range-option\":[],
                                                \"json-property\":\"primarydate\",
                                                \"type\":\"xs:dateTime\"
                                            }
                                        },
                                        {
                                            \"range-query\":{
                                                \"range-operator\":\"LE\",
                                                \"value\":[\"2010-09-10T04:00:00.000Z\"],
                                                \"range-option\":[],
                                                \"json-property\":\"primarydate\",
                                                \"type\":\"xs:dateTime\"
                                            }
                                    ]
                                }
                            }
                        ]
                    }
                },
                {
                    \"operator-state\":{
                        \"operator-name\":\"results\",
                        \"state-name\":\"highlight\"
                    }
                }
            ]
        }
    }",
    "start": 1
}

考虑到缩短的时间范围,我希望它能更快地完成。

这是怎么回事?MarkLogic数据库版本为10.0-5。

EN

回答 2

Stack Overflow用户

发布于 2021-10-01 17:03:36

有几件事可以尝试一下。首先,将其隔离到qconsole。我不确定确切的接口是什么(Java API?)您将从获取日志,但可以将其转换为简单的查询条件,如(手动编辑):

代码语言:javascript
复制
let queryCondition = cts.andQuery([
  cts.jsonPropertyRangeQuery("primarydate", ">=", xs.dateTime("2000-09-10T04:00:00.000Z"), 
  cts.jsonPropertyRangeQuery("primarydate", "<=", xs.dateTime("2010-09-10T04:00:00.000Z"), 
  cts.wordQuery("T1", "T2", "T3")
]) 

或者类似的。

通过cts.estimate(querycondition)cts.uris(null, null, queryCondition)只测试索引解析部分(而不是文档检索

如果这重现了错误,您可以从那里调优查询。

我的猜测是你的系统超载了。这不是一个非常大的查询,而且您的数据库也不大,所以这些时间太高了。您可能内存不足,正在交换内存,或者有其他系统问题,可能是磁盘问题。

但无论哪种方式,我都会首先将其放入qconsole中,并准确隔离正在运行的查询,以便进行索引解析,并通过删除查询位直到找到运行速度最慢的最小组合来引起问题。

还要注意,您可以在qconsole缓冲区的末尾返回xdmp.queryMeters()cts.plan(queryCondition),这将会起作用。这两种方法都不需要search.search()转换。

票数 1
EN

Stack Overflow用户

发布于 2021-10-06 13:29:30

好消息。如果xdmp.estimate(查询)运行得很快,那么范围索引的变化可能并不重要(所有的索引工作都是在估计查询时进行的。

听起来像是中间件或者MarkLogic之外的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69387515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档