免责声明:elasticsearch noob在这里。
我将嵌套字段value
用于对象数组。每个对象都具有以下属性:id
和"value_per_id": [
{
"id": 2,
"value": "positive"
},
{
"id": 23,
"value": "positive"
},
{
"id": 65,
"value": "neutral"
}
]
。
例如
{
"query" : {
"bool" : {
"filter" : [
{
"bool" : {
"must" : {
"nested" : {
"path" : "value_per_id",
"query" : [
{"terms" : {"value_per_id.value" : <MY_VALUES>}},
{"terms" : {"value_per_id.id" : <MY_IDS>}},
]
}
}
}
}
]
}
}
}
我有一个看起来像这样的查询(为清楚起见进行了编辑):
MY_VAULES = ['positive', 'neutral']
通过此查询,我得到了具有对象的所有元素,其值的值为MY_VALUES或ID为MY_IDS。
我希望所有在MY_VALUES中具有值的元素对于MY_IDS中的任何ID。
(例如,如果MY_IDS = [1, 2]
和@(base url with version identifier)
,我希望那些对象具有1-正,1-负,2-正或2-负)。
这是什么语法?
编辑-格式错误
答案 0 :(得分:1)
在布尔查询中使用must
或filter
。
如果您使用must
,则子查询将有助于得分,如果您使用filter
,则不会。另外,如果您使用filter
,elasticsearch将能够缓存结果。
{
"bool": {
"must": [
{
"nested": {
"path": "value_per_id",
"query": {
"terms": {
"value_per_id.value": <MY_VALUES>
}
}
}
},
{
"nested": {
"path": "value_per_id",
"query": {
"terms": {
"value_per_id.id": <MY_IDS>
}
}
}
}
]
}
}
答案 1 :(得分:1)
您需要像这样在嵌套查询中使用布尔值:
{
"query": {
"bool": {
"filter": [{
"nested": {
"path": "value_per_id",
"query": {
"bool": {
"must": [
{"term": {"value_per_id.value": 1}},
{"term": {"value_per_id.id": 2}}
]
}
}
}
}]
}
}
}