不区分大小写的字段不区分大小写

时间:2016-06-25 04:35:42

标签: elasticsearch

如何在不分析数据的情况下使用不区分大小写的过滤器进行搜索? 对于例如在这个例子中,我得到了" delhi"和"德里"由于资本化而单独进入。

new york 2
Delhi 1
delhi 1
new Jersey 1

预期结果:

new york 2
delhi 2
new jersey 1

我尝试过小写分析器,但为此我需要将索引更改为将返回" new"作为一个单独的城市,这是错误的。

DELETE /test_index
PUT /test_index
{
   "mappings": {
      "doc": {
         "properties": {
            "cities": {
               "type": "string",
               "index": "not_analyzed"
            }
         }
      }
   }
}

POST /test_index/doc/_bulk
{"index":{"_id":1}}
{"cities":["new york", "delhi"]}
{"index":{"_id":2}}
{"cities":["new york", "Delhi", "new Jersey"]}


POST /test_index/_search?search_type=count
{
    "aggs": {
        "city_terms": {
            "terms": {
                "field": "cities"
            }
}}}

1 个答案:

答案 0 :(得分:2)

是的,但您仍然需要type TCPConn struct { conn } 分析器完成与keyword完全相同的工作,但只会降低您的输入:

not_analyzed

<强>更新

在ES 5之前,你可以这样做:

PUT /test_index
{
   "settings": {
     "analysis": {
       "analyzer": {
         "keyword": {
           "type": "custom",
           "tokenizer": "keyword",
           "filter": ["lowercase"]
         }
       }
     }
   },
   "mappings": {
      "doc": {
         "properties": {
            "cities": {
               "type": "string",
               "analyzer": "keyword"
            }
         }
      }
   }
}