gpt4 book ai didi

elasticsearch - elasticsearch必须与MUST_NOT(反)差异

转载 作者:行者123 更新时间:2023-12-02 22:37:24 28 4
gpt4 key购买 nike

我有一个相当大的terms聚合结果,这些结果被加载到下拉列表中以提供filter功能。

可以说,我的下拉列表中有4000多种动物。我的另一个下拉列表有4种动物颜色。

例,
animal --> ["dog", "cat", "rabbit", ........ , "squirrel"]color --> ["black", "white", "grey", "brown"]elasticseatch中的文档如下所示:

{"animal": "dog", "color": "white"},
....
{"animal": "cat", "color": "white"},
....
{"animal": "rabbit", "color": "grey"},
....
{"animal": "squirrel", "color": "brown"}

默认情况下,我的下拉列表中的所有 checkboxes都是 checked,Elasticsearch返回它包含的所有结果。现在,我想查看基于所选动物颜色的另一个字段 animal_features的基数结果。如果下拉列表中没有 checked,那么实际上可以轻松完成此操作,而我可以运行以下查询。当color = black时,查询将返回预期的基数结果。
{
"query": {
"bool": {
"must": [
{"match": { "color": "black"}}
]
}

},
"aggs": {
"unique_animal_features": {
"cardinality": {
"field": "animal_features",
"precision_threshold" : 40000
}
}
}
}

但是,默认情况下,我具有所有动物和颜色 checked。假设我仍然需要color = black时的基数结果。因此,就我而言,我需要取消选中除黑色之外的所有其他颜色。因此,我继续取消选中白色,灰色和棕色。

从下面的第二个查询中,我期望Elasticsearch将返回相同的结果,因为我使用 must_not查询从结果中排除了不是黑色的其他颜色。
{
"query": {
"bool": {
"must_not": [
{
"match": {
"color": "white"
}
},
{
"match": {
"color": "grey"
}
},
{
"match": {
"color": "brown"
}
}
]
}
},
"aggs": {
"unique_animal_features": {
"cardinality": {
"field": "animal_features",
"precision_threshold" : 40000
}
}
}
]
}

但是,第二个查询返回的基数结果非常不准确。我需要使用第二个查询,但需要的结果与第一个查询一样,如何优化第二个查询来做到这一点?

注意:第一个查询和第二个查询之间的唯一区别是,在第一个查询的情况下,除了单一颜色之外,没有选择任何其他内容。但是,在第二个查询的情况下,默认选择包括动物以及颜色在内的所有内容,直到用户开始取消选中颜色为止。

最佳答案

我能够找出问题所在。在我的情况下,elasticsearch中有null值,第二个查询返回基于所选animal和包含null的记录的基数计数。

我将"null_value": "_null_"添加到索引模板中,并通过以下查询获得正确的值。

{
"query": {
"bool": {
"must_not": [
{
"match": {
"color": "_null_"
}
},
{
"match": {
"color": "white"
}
},
{
"match": {
"color": "grey"
}
},
{
"match": {
"color": "brown"
}
}
]
}
},
"aggs": {
"unique_animal_features": {
"cardinality": {
"field": "animal_features",
"precision_threshold" : 40000
}
}
}
]
}

关于elasticsearch - elasticsearch必须与MUST_NOT(反)差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46284520/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com