ElasticSearch-带前缀的短语查询没有结果

时间:2019-03-14 15:18:57

标签: elasticsearch

我有一个使用空格标记器以及小写和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的值。

我需要更改什么才能从第二个查询中获得结果?谢谢。

1 个答案:

答案 0 :(得分:0)

您是否考虑过使用prefixwildcard词级查询?当然,您需要为keyword字段(类型为字符串字段的默认值)使用name类型的多字段,但是您不必担心{{ 1}}。

您的查询如下所示:

max_expansions