bob*_*ina 2 search wildcard match elasticsearch
当我使用匹配指令运行查询时,我似乎遇到了一个特殊的问题,如下所示
{
"query":
{"match": {
"value.account.names.lastName" : "*GUILLERMO*"
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我使用带有通配符的查询时,如下所示,我没有得到任何结果。
{
"query":
{"wildcard": {
"value.account.names.lastName" : "*GUILLERMO*"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我真的不知道问题是什么。非常感谢您的任何意见
假设您尝试对分析字段运行通配符查询,Elasticsearch 的行为是完全正确的。正如 Elasticsearch 文档所述,通配符查询在术语级别上运行。当您使用包含字符串“Guillermo del Toro”的字段对文档进行索引时,name
该字段的值将小写并分为三个标记:“guillermo”、“del”和“toro”。*GUILLERMO*
然后,当您针对字段运行通配符查询时,name
Elasticsearch 会将查询字符串与尝试查找匹配项的每个标记进行比较。在这里,您不会仅仅因为您的查询字符串是大写而分析的令牌是小写而受到打击。
针对分析字段运行通配符查询可能是一个坏主意,但如果强烈需要,我建议使用内置name.keyword
字段而不仅仅是name
字段(但您将再次面临区分大小写的问题)。更好的解决方案是为此目的创建您自己的小写未分析字段。