我有Product
模型和Sku
模型,Product
有多个Skus
。
在elasticsearch中,我可以使用Products
定价过滤Sku
,并使用如此结构的查询:
query:
bool:
must: [
nested:
path: 'skus'
query:
bool:
must: [
range:
baseline_price:
gte: opts.min_price
lte: opts.max_price
]
]
但是,我在length
模型上对width
,height
和Sku
值进行类似操作时遇到了问题。
我想找到所有Skus
,length
,width
或height
的{{1}}。我尝试过这样的事情:
query:
bool:
must: [
nested:
path: 'skus'
query:
bool:
should: [
exists: { field: 'length' }
exists: { field: 'width' }
exists: { field: 'height' }
]
]
只是为了返回任何有用的东西,但任何组合都会引发错误。在上面的情况中,它会抛出No query registered for [exists]
我已查看了documentation for null values in elasticsearch,但仍然没有运气。
我该如何撰写此查询?
答案 0 :(得分:0)
我能够让它有点像这样:
query:
bool:
must: [
nested:
path: 'skus'
query:
constant_score:
filter:
bool:
must: [
missing: { field: 'skus.width' }
]
]
这会发现Skus
缺少width
。但是,不幸的是,添加其他length
或height
字段的行为与OR
不同,而不是AND
,我不确定这是弹性搜索的错误还是不
这足以满足我们现在的需求,但仍不确定是否有办法过滤多个缺失的字段。