关键字是标记化的,完全匹配不起作用

时间:2017-03-03 10:46:13

标签: elasticsearch

我有一个名为id的字段,看起来像这样:

ventures.something.123

它的映射:

{  
   "id":{  
      "fields":{  
         "keyword":{  
            "ignore_above":256,
            "type":"keyword"
         }
      },
      "type":"text"
   }
}

我的理解是关键字只允许进行精确匹配 - 这就是我想要的。

然而,分析仪告诉我它被标记化了:

> http http://localhost:9200/my_index/_analyze field=id text='ventures.house.1137'

{
    "tokens": [
        {
            "end_offset": 14,
            "position": 0,
            "start_offset": 0,
            "token": "ventures.house",
            "type": "<ALPHANUM>"
        },
        {
            "end_offset": 19,
            "position": 1,
            "start_offset": 15,
            "token": "1137",
            "type": "<NUM>"
        }
    ]
}

...并且搜索id确实会返回以ventures.house开头的所有ID。

为什么会这样,我怎样才能进行精确匹配?

ES 5.2。

3 个答案:

答案 0 :(得分:1)

来自https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping-intro.html#_index_2

not_analyzed:     索引此字段,因此可以搜索,但可以完全按照指定索引值。不要分析它。

{
  "tag": {
      "type":     "string",
      "index":    "not_analyzed"
  }
}

答案 1 :(得分:0)

我误读了映射,看起来我的elasticsearch-dsl库没有直接创建关键字,而是将其添加为子字段。

答案 2 :(得分:0)

您是否尝试过定义字段&#39; id&#39;作为关键字?

在这种情况下,它不会被分析,而是按原样存储。 当我正确理解你的问题时,这就是你想要的。

{  
 "id":{
   "type":"keyword"
 }
}

请参阅https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html

我希望这有帮助。基督教