我正在使用以下查询:
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的值很小,我也可以获得匹配结果?
感谢您的帮助。
答案 0 :(得分:0)
这是由于max_expansions。限制数据集并不完全是您想要做的(那也不是很简单-您可能必须使用一些脚本,这反过来会降低查询速度)。
查询通配符表达式时,Lucene会将通配符表达式扩展为倒排索引术语词典中的一组实际术语。现在,当您将词条扩展限制为500时-可能会错过一些。
我会考虑在索引编制阶段使用prefixes。前缀有助于避免在运行时阶段进行昂贵的扩展。