弹性搜索通配符查询不起作用
elasticsearch wild card query not working
当我 运行 我使用如下匹配指令进行查询时,我似乎 运行 遇到了一个特殊问题
{
"query":
{"match": {
"value.account.names.lastName" : "*GUILLERMO*"
}
}
}
现在,当我使用如下通配符进行查询时,我没有得到任何结果。
{
"query":
{"wildcard": {
"value.account.names.lastName" : "*GUILLERMO*"
}
}
}
我真的不知道问题出在哪里。非常感谢任何输入
假设您正在尝试 运行 针对分析字段的通配符查询,Elasticsearch 的行为是完全正确的。正如 Elasticsearch 文档所述,通配符查询在术语级别上运行。当您使用包含字符串 "Guillermo del Toro" 的字段 name
索引文档时,该字段的值将小写并拆分为三个标记:"guillermo"、"del" 和 "toro"。然后,当您针对 name
字段 运行 通配符查询 *GUILLERMO*
时,Elasticsearch 会将查询字符串与每个试图找到匹配项的标记进行比较。在这里你不会因为你的查询字符串是大写的而被分析的标记是小写的而被命中。
运行 针对分析字段的通配符查询可能不是一个好主意,但如果强烈要求,我建议使用内置 name.keyword
字段,而不仅仅是 name
字段(但你将再次面临区分大小写的问题)。更好的解决方案是为此创建您自己的小写未分析字段。
当我 运行 我使用如下匹配指令进行查询时,我似乎 运行 遇到了一个特殊问题
{
"query":
{"match": {
"value.account.names.lastName" : "*GUILLERMO*"
}
}
}
现在,当我使用如下通配符进行查询时,我没有得到任何结果。
{
"query":
{"wildcard": {
"value.account.names.lastName" : "*GUILLERMO*"
}
}
}
我真的不知道问题出在哪里。非常感谢任何输入
假设您正在尝试 运行 针对分析字段的通配符查询,Elasticsearch 的行为是完全正确的。正如 Elasticsearch 文档所述,通配符查询在术语级别上运行。当您使用包含字符串 "Guillermo del Toro" 的字段 name
索引文档时,该字段的值将小写并拆分为三个标记:"guillermo"、"del" 和 "toro"。然后,当您针对 name
字段 运行 通配符查询 *GUILLERMO*
时,Elasticsearch 会将查询字符串与每个试图找到匹配项的标记进行比较。在这里你不会因为你的查询字符串是大写的而被分析的标记是小写的而被命中。
运行 针对分析字段的通配符查询可能不是一个好主意,但如果强烈要求,我建议使用内置 name.keyword
字段,而不仅仅是 name
字段(但你将再次面临区分大小写的问题)。更好的解决方案是为此创建您自己的小写未分析字段。