我正在尝试使用弹性搜索,我试图查询嵌套对象。
基本上我的对象是以下格式
{
"name" : "Some Name",
"field2": [
{
"prop1": "val1",
"prop2": "val2"
},
{
"prop1": "val3",
"prop2":: "val4"
}
]
}
我用于嵌套字段的映射如下。
PUT /someval/posts/_mapping
{
"posts": {
"properties": {
"field2": {
"type": "nested"
}
}
}
}
现在说我为/ field / posts / 1和/ field / posts / 2等插入元素。我有field2.prop1的k值,我想要一个查询,根据field2.prop1的大多数匹配对帖子进行排序在我拥有的K值中。什么是适当的查询。 我也尝试了一个简单的过滤器,但即便看起来也不行。
GET /someval/posts/_search
{
"query": {
"filtered": {
"query": {
"match_all": {}
}
},
"filter" : {
"nested" : {
"path" : "field2",
"filter" : {
"bool" : {
"must" : [
{
"term" : {"field2.prop1" : "val1"}
}
]
}
},
"_cache" : true
}
}
}
}
以上查询应至少匹配第一篇文章。但它没有返回匹配。任何人都可以帮忙澄清这里的错误吗?
答案 0 :(得分:1)
你的json结构中存在问题,你使用过滤查询,但过滤器(对象)与查询不同。
找出差异。
POST /someval/posts/_search
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"nested": {
"path": "field2",
"filter": {
"bool": {
"must": [
{
"term": {
"field2.prop1": "val1"
}
}
]
}
},
"_cache": true
}
}
}
}
}