elasticsearch - JSON在列表中时如何匹配?
问题描述
有些人像这样映射数据,
"item":[
{"name": "ABC" }
{"brand": "edf" },
{"quantity": 12 }
]
我试图像这样过滤:
"filter":
{"term": {"item.brand": "edf}}
然后我得到了这个结果:
"hits": {
"total": {
"value": 0,
"relation": "eq"
},
我认识到这一点name
,brand
并被quantity
置于[]
主要问题:我们可以在不改变映射方式的情况下过滤它吗?
#实际情况:
"item": {
"categories": [
{"deleted_at": null,
"description": {
"en": "Bun ",
"vi": "Bánh Bao "
}
},
....
]
}
我的查询:
["filter":
{"nested": {"path":"item.categories",
"query":{
"term":{"item.categories.description.en":"Bun "}
}
}
}
]
得到这个错误:
"failed to create query: [nested] nested object under path [item.categories] is not of nested type",
解决方案
可能item
是嵌套类型,如果是这种情况,您需要使用nested
如下查询进行查询:
{
"query": {
"bool": {
"filter": {
"nested": {
"path": "item",
"query": {
"term": {
"item.brand": "edf"
}
}
}
}
}
}
}
更新:
根据你得到的错误,item.categories
不是嵌套的,所以你的初始查询是正确的。但是,您应该使用match
而不是term
,如下所示:
{
"query": {
"bool": {
"filter": {
"match": {
"item.categories.description.en": "Bun"
}
}
}
}
}
推荐阅读
- php - composer global 需要 laravel/installer 不工作
- python - 正则表达式获取 < > 之间的值
- javascript - 如何在 JavaScript 中随机打乱列表项
- ruby-on-rails - 父对象只拾取 has_many 中的第一个子对象
- php - 如何使用 Jquery Ajax 将表单输入字段发送为 JSON 格式
- java - 确定回文的程序只执行 else 条件
- python - 获取具有相同数字和连续索引的子数组
- json - Alexa 一直回复“请求的技能的响应有问题”
- php - 如何使用 json_encode 对两个数组进行编码?
- sql-server - SQL Server CONTAINS 无法按预期工作