Elasticsearch通配符查询不遵守字段的分析器

时间:2016-01-08 11:38:52

标签: elasticsearch

我有一个名为“tag”的字段,在elasticsearch中进行分析(默认行为)。 “tag”字段可以有一个单词或逗号分隔的字符串来存储多个标签。例如。 “节日,快速,盛宴”。 现在,例如,如果标签是“节日”,则在编制索引之前我将其转换为小案例(忽略区分大小写)并将其编入索引为“节日”。

现在如果我使用匹配查询搜索所有大写字母,如下所述,我得到的结果很好(正如预期的那样)。

{
    "query": {
        "match": {
           "tag": "FESTIVE"
        }
    }
}

但如果我按照下面提到的那样进行通配符查询,我就不会得到结果:(

{
    "query": {
        "wildcard": {
           "tag": {
              "value": "F*"
           }
        }
    }
}

如果我将通配符搜索中的值字段更改为“f *”而不是“F *”,那么我会得到结果。

有没有人知道为什么通配符查询表现区分大小写?

1 个答案:

答案 0 :(得分:5)

Wildcard queries,属于term level queries,因此未分析。来自文档

  

匹配具有与通配符表达式匹配的字段的文档(不是   分析的)

您将获得query string query的预期结果,lowercase这些条款,因为默认情况下lowercase_expanded_terms为真。试试这个

GET your_index/_search
{
  "query": {
    "query_string": {
      "default_field": "tag",
      "query": "F*"
    }
  }
}

希望这有帮助!