弹性搜索中的匹配查询区分大小写吗?

时间:2016-02-07 13:59:41

标签: elasticsearch

我已经关注了enter image description here

中的示例

索引的映射是

{
  "mappings": {
    "my_type": {
      "properties": {
        "full_text": {
          "type":  "string" 
        },
        "exact_value": {
          "type":  "string",
          "index": "not_analyzed" 
        }
      }
    }
  }
}

索引的文件是

{
  "full_text":   "Quick Foxes!", 
  "exact_value": "Quick Foxes!"  
}

我在" full_text"上使用简单匹配查询时注意到了像下面的字段

{
  "query": {
    "match": {
      "full_text": "quick"
    }
  }
}

我看到文件是匹配的。此外,如果我使用大写,那就是" QUICK" ,作为搜索词,它显示文档是匹配的。

为什么会这样?默认情况下,tokenizer会将文本拆分为" full_text"进入"快速","狐狸"。那么匹配查询如何匹配文档中的大写值?

1 个答案:

答案 0 :(得分:5)

因为您还没有指定哪个分析器用于" full_text"将字段放入索引映射中,然后使用默认分析器。默认值为" Standard Analyzer"。

引自ElasticSearch docs:

  

使用带有标准令牌过滤器,小写令牌过滤器和停止令牌过滤器的标准令牌器构建标准型分析器。

在索引中执行查询之前,ElasticSearch会将为您的字段配置的相同分析器应用于查询值。因为默认分析器在处理中使用小写令牌过滤器,然后使用"快速"或者" QUICK"或者"快速"将为您提供相同的查询,因为分析器将使用小写令牌过滤器来降低它们的结果,结果只是"快速"。