【问题标题】:OR and And are not working in elastic as expectedOR 和 And 没有像预期的那样在弹性中工作
【发布时间】:2023-04-03 09:47:01
【问题描述】:

我使用的是 elastic 2.4,我写了下面的查询:

    "query": {
        "bool": {
            "should": [{
                "prefix": {
                    "firstname": "guneet"
                }
            }, {
                "prefix": {
                    "lastname": "guneet"
                }
            }],
            "must": [{
                "terms": {
                    "activities.id": ["1"]
                }
            }]
        }
    }

没有按预期返回结果。它应该给我的结果是 activities.id 匹配 AND 名字或姓氏匹配。但它返回给我的结果是activities.id 匹配并且忽略应该条件,即它返回给我所有activity.id 匹配的记录,而不管名字或姓氏。

我参考了combining filters

我的查询 MySql 版本应该是这样的: select * from users where (firstname like "%guneet%" or lastname like "%guneet%") and activities.id = [1,2].

任何关于我如何塑造我的查询以获得类似上面 mysql 查询的建议。

提前致谢!

【问题讨论】:

    标签: php elasticsearch


    【解决方案1】:

    由于你有一个bool/must 子句,你需要添加一个minimum_should_match clause 并且它会起作用:

    "query": {
        "bool": {
            "minimum_should_match": 1,
            "should": [{
                "prefix": {
                    "firstname": "guneet"
                }
            }, {
                "prefix": {
                    "lastname": "guneet"
                }
            }],
            "must": [{
                "terms": {
                    "activities.id": ["1"]
                }
            }]
        }
    }
    

    【讨论】:

    • 这有帮助吗?
    猜你喜欢
    • 1970-01-01
    • 2023-01-01
    • 1970-01-01
    • 2016-06-19
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    相关资源
    最近更新 更多