首页 > 解决方案 > 带有连字符值的弹性、术语(或 _ID)查询

问题描述

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

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

我尝试了一些变化,但到目前为止都没有奏效..

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

这不会返回任何东西

标签: elasticsearchanalyzerhyphenterm

解决方案


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

发布 /_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即可获得搜索结果。


推荐阅读