gpt4 book ai didi

performance - 在Elasticsearch中是否在过滤器上下文之前评估查询上下文?如何确定评估顺序?

转载 作者:行者123 更新时间:2023-12-03 02:35:33 24 4
gpt4 key购买 nike

我正在使用以下查询:

GET customer/doc/_search?routing=123
{
"query": {
"bool": {
"filter": [
{
"term": {
"location": "Delhi"
}
}
],
"should": [
{
"match_phrase_prefix": {
"phone": {
"query": "650",
"max_expansions": 100
}
}
}
]
}
}
}

问题是我在手机上的搜索不再起作用。当我的数据较少时,它过去可以正常工作,现在每个分片都具有多个位置的数据。现在,在手机上搜索需要我输入6或7个字符。 (可能有匹配的电话号码,但位置不同,但在此分片上)

这是由于我猜的max_expansions。当我将其增加到500时,它确实会返回搜索结果(不是全部),但是查询变慢。

是否没有办法强制es首先应用过滤器(并限制数据集),然后应用should子句,以使即使max_expansions的值很小,我也可以获得匹配结果?

任何帮助表示赞赏。

最佳答案

这是由于max_expansions。限制数据集并不完全是您想要做的(那也不是很简单-您可能必须使用一些脚本,这反过来会降低查询速度)。

当查询通配符表达式时,Lucene会将通配符表达式扩展为倒排索引术语词典中的一组实际术语。现在,当您将扩展名限制为500时-可能会遗漏一些。

我会考虑在索引阶段使用prefixes。前缀有助于避免在运行时阶段进行昂贵的扩展。

关于performance - 在Elasticsearch中是否在过滤器上下文之前评估查询上下文?如何确定评估顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58975451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com