我有一个名为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。
答案 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
我希望这有帮助。基督教