【发布时间】:2019-03-14 15:18:56
【问题描述】:
我有一个使用空格标记器以及小写和 asciifolding 过滤器进行分析的字段。我正在尝试运行一个同时包含前缀和通配符的查询。我们正在用 ElasticSearch 替换使用纯 Lucene 的本土搜索引擎,类似的查询确实适用于 Lucene 语法,但不适用于 ElasticSearch。
例如,此查询将查找“name”字段中包含“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”。我只想要“smith john”和“smith johnny”等名字。
我也尝试了 query_string 的变体,结果相似。
我知道我可以使用“match_phrase_prefix”来搜索“smith joh”,但这有其自身的局限性,例如限制通配符的使用以及需要知道或猜测 max_expansions 的值。
我需要更改哪些内容才能从第二个查询中获取结果?谢谢。
【问题讨论】:
-
您好,您的问题解决了吗?我的回答有帮助吗?
标签: elasticsearch