【问题标题】:Multiselect aggregation in elastic search弹性搜索中的多选聚合
【发布时间】:2026-02-21 19:30:01
【问题描述】:

我有一个场景,我需要允许用户在 facet 上选择多个值。

我有一个称为 states 的构面:构面值是 state1(20),state2(10),state3(30)。

当我选择 state1 时,我收到了 20 个结果,但其他 2 个值不是来自弹性搜索。我需要允许用户选择 state2 或 state3 来进行或操作。 我在Elasticsearch multi-select facet functionality with child aggregation 中找到了解决方案。 有人可以帮我将此请求转换为 java 请求

任何建议, 提前致谢。 斯里

【问题讨论】:

    标签: elasticsearch spring-data


    【解决方案1】:

    取决于您如何设计应用程序和相应的 Elasticsearch 查询。如果您最终在查询中将 state1 作为必须条件,那么您显然不会在查询结果的聚合部分看到 state2 和 state3。我认为您正在使用相同的查询来获取数据和方面。在这种情况下,这是预期的行为。您需要将聚合查询和结果查询分开,并使用聚合查询结果显示分面以供选择。

    【讨论】:

    • 感谢您的回复。我使用“应该”来获取详细信息。我们如何对聚合有单独的请求。如果我们分别调用,聚合结果计数是否与结果匹配?
    【解决方案2】:

    如果您在同一字段中进行搜索,我相信您的查询(使用 should)应该是这样的:

    {
        "size": 10,
        "query": {
            "bool": {
                "should": {
                    "terms": 
                        {"states": ["state1", "state2"] }
                }
            }
        }
    }
    

    这将包括状态为“state1”或“state2”的结果。

    【讨论】:

    • 搜索不会有问题。问题在于聚合值。我需要得到所有响应的桶。
    • 那时我还没有完全理解这个问题。您能否为用户所做的事情添加一些步骤,以及您希望在每个步骤之后发生什么?