我有一个字段,使用空白标记器和小写和asciifolding过滤器进行分析。我试图运行一个同时包含前缀和通配符的查询。我们正在用ElasticSearch取代一个使用纯Lucene的原生搜索引擎,类似的查询确实使用Lucene语法,但在ElasticSearch中不起作用。
例如,该查询将查找在“name”字段中有“Smith John”的所有文档。
{
"query": {
"simple_query_string": {
"query": "\"smith john\"",
"fields": ["name"],
"default_operator": "AND"
}
}
}
{
"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的值。
我需要更改什么才能从第二个查询中获得结果?谢谢你。
您是否考虑使用前缀或通配符术语级查询?当然,您的name
字段需要一个类型为keyword
的多字段(对于字符串字段来说,这是默认值),但是您不需要担心max_expansions
。
那么,您的查询可能如下所示:
{
"query": {
"prefix": {
"name.keyword": "smith joh"
}
}
我遇到了一个问题,elasticsearch在我的环境(舞台和生产)中返回不同的结果。 我使用的elasticsearch版本对于这两种环境是相同的。 这两个环境都具有相同的映射和索引设置。 我有一个项目索引的标题字段为“测试”。我正在尝试执行match_phrase_prefix查询。然而,在我的舞台环境中,当我搜索“te”时,结果会像预期的那样返回。在生产中,我必须将搜索查询扩展到“TES”(
以下是可用的样本数据: null 示例查询: } 尝试了match_phrase_prefix,这也类似于prefix 示例查询:
这是我索引中的文档(也可以有几个): 从逻辑上讲,我试图建立这个条件: 我的问题(来自kibana): 我正在与上述范围内的字段的范围查询与上面的其他字段进行比较。但没有得到任何命中!我想检索具有在给定和日期。 在这个领域很缺乏经验,不知道为什么不起作用!请帮助如何修复此查询以做到这一点?
问题内容: 我是elasticsearch的新手。我有以下查询 } 在这里我希望Elastic应该给出不区分大小写的结果,例如字符串开头如下 但是我并没有像这样得到所有结果。所以任何人都可以帮助我。 示例:-我有4个文档 现在搜索,应该只返回前3个文档,因为它们从 此处忽略大小写开始,而不是第4 个文档,而第4个文档也包含但不包含开头。 问题答案: 这是在您使用关键字字段在应用程序中建立索引时发生
问题内容: 我有两个ES查询: 问题是第二个查询返回的文档少于第一个查询,尽管我希望第二个查询返回第一个查询的所有记录以及其他内容。我想念什么? 谢谢 问题答案: 这可能是由于将其设置为默认值10 试试这个 该线程将帮助您了解术语的扩展方式。使1000并查看结果。 基本上,您有很多以bo开头的单词,例如 bond,boss, 而且由于 “ x” 按字母顺序排在最后,因此您无法获得期望的结果。 我希
问题内容: 我是ES的新手,我正在尝试建立一个查询,该查询将对多个字段使用phrase_prefix,因此我不必进行多次搜索。 这是到目前为止我得到的: 有人知道如何搜索多个字段,例如“ last_name”吗? 问题答案: 您正在使用的文本查询已被弃用(有效重命名),而改为使用match query 。匹配查询支持单个字段,但是您可以使用multi_match查询,该查询支持完全相同的选项并允许