elasticsearch - 带有连字符值的弹性、术语(或 _ID)查询
问题描述
我正在努力查询完全匹配。该字段在文档中的两个字段中是相同的,在 _id 和正文中的一个字段中。
所以我可以搜索这些字段中的任何一个。有没有办法配置术语查询来支持这一点?我试过指定空白分析器,但它似乎不是术语查询的支持配置。
我尝试了一些变化,但到目前为止都没有奏效..
data: {
query: {
term: {
"_id":"4123-0000"
}
}
}
这不会返回任何东西
解决方案
问题是,当您使用默认映射时,您的_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
即可获得搜索结果。
推荐阅读
- julia - 如何获取 Julia 中函数的执行时间?
- google-cloud-platform - 两个虚拟机(计算实例)之间的 GCP 内部负载平衡器
- c# - 带有 Firebase 的 Xamarin 表单。数据检索抛出 System.InvalidCastException:“指定的转换无效。”
- batch-file - 如何在不执行的情况下回显批处理命令?
- javascript - d3 linkHorizontal 用于直线曲线
- pyspark - 如何将 Spark 数据帧(在 DataBricks 中)写入 Blob 存储(在 Azure 中)?
- twig - 使用 Twig 声明模板并在父模板的块之间传递附加内容
- c++ - Visual Studio C++ 中的错误代码 = 0x80070002
- elasticsearch - 弹性搜索是否使用以前的搜索频率?
- javascript - 使用 react-leaflet 渲染 TopoJSON