elasticsearch - Elasticsearch 查询排除另一个查询的结果
问题描述
'articles' 的简化 Elasticsearch 索引包含带有 和 字段的文档domain_name
,tag
以及一些其他内容。
tag
仅限于少数关键字值,例如source1
, source2
,其中tag
每个文档中只能有一个值。domain_name
是每个文档中的单个值
我想返回一组文档,其中tag=source1
不包括domain_name
来自另一个查询的tag=source2
分两步,这将类似于:
设置为排除
{
"query": {
"term" : { "tag" : "source2" }
}
}
结果将被处理以产生一个domain_name
值数组,每个返回的文档都有一个值。
然后第二个查询将获取它关心的所有项目,然后排除它不关心的术语(来自前一个查询的域名列表)。
查询减去设置为排除
{
"query": {
"bool": {
"must": {
"term" : { "tag" : "source1" }
},
"must_not": {
"terms": {
"tag": [<array of domain_name values>]
}
}
}
}
}
这可能在单个查询中,还是使用聚合?索引和结果集不会很大,所以我不太担心性能而不是方便。
额外的问题,这可以直接在 Kibana 中定义吗?
解决方案
对于我的情况,我使用编程语言(Java)执行第一个查询并通过第一个查询获取文档的结果数组,然后我将查询结果的 id 存储在数组中,并使用包含第一个查询的 id 的这个数组来执行第二个查询弹性不支持嵌套查询
推荐阅读
- laravel - what that mean in laravel
- python - Can someone help me find a solution to error source in my code?
- graphics - How to get the color of a specific pixel drawn using SDL_RenderDrawPoint() on SDL2?
- python - Tensorflow preprocessing split string to chars
- python-3.x - loop over dict key-value-pair or each element in dict
- python - 按顺序发布最有趣的流派 - python app
- python - 如何根据标题值删除列?
- react-native - What's the correct way to transpile react-native to use with nodejs?
- php - Laravel 5.8:从空值创建默认对象
- python - 矩阵(列表)的元素总和,但仅在另一个矩阵(列表)中给出的索引处