elasticsearch通配符查询不起作用

时间:2018-08-14 20:51:17

标签: elasticsearch search match wildcard

当我使用match指令运行查询时,似乎遇到了一个奇怪的问题,如下所示

{
  "query":
        {"match": {
            "value.account.names.lastName" : "*GUILLERMO*"
          }
    }
}

现在,当我使用带有通配符的查询(例如下面的查询)时,我不会受到打击。

{
  "query":
        {"wildcard": {
            "value.account.names.lastName" : "*GUILLERMO*"
          }
    }
}

我对可能发生的问题真的迷失了。非常感谢您的任何投入

1 个答案:

答案 0 :(得分:2)

假设您要对已分析的字段运行通配符查询,那么Elasticsearch的行为是完全正确的。正如Elasticsearch文档所述,通配符查询在术语级别上运行。当您使用包含字符串“ Guillermo del Toro”的字段name索引文档时,该字段的值将变为小写并分成三个标记:“ guillermo”,“ del”和“ toro”。然后,当您对*GUILLERMO*字段运行通配符查询name时,Elasticsearch会将查询字符串与每个试图查找匹配项的单个令牌进行比较。在这里,您不会因为查询字符串为大写而分析的令牌为小写而受到打击。

对已分析的字段运行通配符查询可能不是一个好主意,但是如果强烈需要,我建议使用内置的name.keyword字段,而不是仅使用name字段(但同样,您会遇到区分大小写的问题)。更好的解决方案是为此创建您自己的小写未分析字段。