具有连字符值的弹性,术语(或_ID)查询

时间:2020-09-12 03:57:21

标签: elasticsearch analyzer hyphen term

我正在努力查询完全匹配。该字段在文档中的两个字段中相同,分别在_id和正文中的一个字段中。

因此我可以搜索这些字段中的任何一个。有什么方法可以配置术语查询以支持此操作?我尝试指定空白分析器,但似乎不是术语查询支持的配置。

我已经尝试了几种变体,但到目前为止都没有奏效。

data: {
    query: {
        term: {
            "_id":"4123-0000"            
        }
    }
}

这不返回任何内容

1 个答案:

答案 0 :(得分:1)

问题是,当您使用默认映射时,您的_id字段似乎已被您填充,该字段本来会使用text字段,而该字段使用standard分析器并拆分了令牌基于-,因此您的_id字段的标记如下:

POST / _analyze

{
  "text" : "4123-0000",
  "analyzer" : "standard"
}

和令牌

 {
        "tokens": [
            {
                "token": "4123",
                "start_offset": 0,
                "end_offset": 4,
                "type": "<NUM>",
                "position": 0
            },
            {
                "token": "0000",
                "start_offset": 5,
                "end_offset": 9,
                "type": "<NUM>",
                "position": 1
            }
        ]
    }

现在您可能已经知道,没有对term查询进行分析,即它按原样使用4123-0000并尝试在反向索引中查找,该索引不可用,因此您不会得到任何结果。

解决方案,只需将_id替换为_id.keyword即可获得搜索结果。

相关问题