在值中使用连字符的 Elastic、Term(或 _ID)查询

Elastic, Term (or _ID) query with Hyphen in value

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

所以我可以搜索这些字段中的任何一个。有没有办法配置术语查询来支持这个?我试过指定空白分析器,但它似乎不是术语查询的受支持配置。

我尝试了一些变体,但 none 目前为止它已经奏效了..

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

这return什么都没有

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

POST/_分析

{
  "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即可得到搜索结果。