【问题标题】:ElasticSearch - filtered query with multiple clauses ES 5ElasticSearch - 带有多个子句的过滤查询 ES 5
【发布时间】:2017-06-30 16:23:09
【问题描述】:

我目前正在尝试创建一个查询,在切换到弹性搜索 5 后以不同方式匹配过滤器中的多个字段,但它们似乎不起作用。这就是我认为查询应该是的:

        query: {
            bool: {
                must: [{ match: { name: 'athing' }}],
                filter: [
                    { bool: {
                        must: [
                            { term: { ownerId: 123} },
                            { term: { itemId: 3453} },
                        ]
                    }},
                    { bool: {
                        minimum_should_match: 1,
                        must: [
                            { term: { groupId: 123565} },
                            { term: { groupId: 5555} },
                        ]
                    }}
                ]
            }
        }

在这种情况下,结果必须与未分析的项目 ID 和组 ID 匹配。在前面的代码中,使用了弹性搜索 1.5,匹配是通过放置在过滤器中的“and”和“or”的集合来完成的。这似乎不再起作用了。

我还想这样做,以便查询能够获取具有传递组 ID 之一的任何人(而不是所有人)。我试图在过滤器的第二个布尔查询中这样做。

理想情况下,我想要一个匹配 'athing' 的查询,属于所有者 ID 123 和组 ID 123565 或 5555 中存在的项目 ID 3453。

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    试试

    bool:
      must: [ term: ownerId, term: itemId]
      should: [ term: groupId, term: groupId ] 
      minimum_should_match: 1
    

    【讨论】:

    • 这似乎奏效了,谢谢!但是有一个问题,据我了解,查询意味着结果必须至少与必须和应该相匹配。这是否意味着匹配 must 但不匹配任何 should 条件的结果可以通过?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2018-11-24
    • 2017-06-17
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多