值中带有连字符的elastic、term(或\u id)查询

hmae6n7t  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(374)

我正在努力寻找精确的匹配。此字段在文档中的两个字段中是相同的,分别位于\u id和正文中的一个字段中。
所以我可以搜索这两个字段中的任何一个。有没有办法配置术语查询来支持这一点?我尝试过指定whitespaceanalyzer,但它似乎不支持术语查询的配置。
我试过几种不同的方法,但到目前为止都不管用。。

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

这没有任何回报

qoefvg9y

qoefvg9y1#

问题是,当您使用默认Map时 _id 字段似乎由您填充,这将使用 text 使用 standard 分析器并根据 - ,所以你的 _id 字段标记如下:
发布/分析

{
  "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 获取搜索结果。

相关问题