我有一个使用空格标记器以及小写和asiifolding过滤器进行分析的字段。我正在尝试运行一个包含前缀和通配符的查询。我们将使用纯Lucene的本地搜索引擎替换为ElasticSearch,类似的查询确实适用于Lucene语法,但不适用于ElasticSearch。
例如,此查询将在“名称”字段中查找所有具有“ smith john”的文档。
{
"query": {
"simple_query_string": {
"query": "\"smith john\"",
"fields": ["name"],
"default_operator": "AND"
}
}
}
但是,我也想找到“ smith johnny”,“ smith john a”等。在我们的Lucene代码中,我们简单地添加了前缀运算符来进行此搜索,但结果为0。
{
"query": {
"simple_query_string": {
"query": "\"smith joh*\"",
"fields": ["name"],
"default_operator": "AND"
}
}
}
如果我省略引号,则会得到结果,但其中包含在同一文档中都带有诸如“ smith barry”和“ wilson john”之类名称的文档。我只想要“史密斯·约翰”和“史密斯·约翰尼”之类的名字。
我也尝试了query_string的变体以及类似的结果。
我知道我可以使用“ match_phrase_prefix”搜索“ smith joh”,但这有其自身的局限性,例如限制使用通配符,并且需要知道或猜测max_expansions的值。
我需要更改什么才能从第二个查询中获得结果?谢谢。