【问题标题】:Bool query or filter query in Elastic SearchElastic Search 中的布尔查询或过滤查询
【发布时间】:2015-04-20 09:54:31
【问题描述】:

我有一个表达式/查询: ("text" started_with "hello" OR "text" started_with "hi") OR ("select" is "first_option" AND "correct" is "true" )。你能告诉我如何在 Elastic Search 中正确使用 bool 和 filter 查询来解决这个表达式吗?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您可以使用“prefix query”以及boolean queryterm query 来实现给定的表达式/查询。尝试如下

    {
        "bool": {
            "should": [
                {
                    "prefix": {
                        "text": {
                            "value": "hello"
                        }
                    }
                },
                {
                    "prefix": {
                        "text": {
                            "value": "hi"
                        }
                    }
                },
                {
                    "bool": {
                        "must": [
                            {
                                "term": {
                                    "select": [
                                        "first_option"
                                    ]
                                }
                            },
                            {
                                "term": {
                                    "correct": [
                                        "true"
                                    ]
                                }
                            }
                        ]
                    }
                }
            ]
        }
    }
    

    【讨论】:

    • 我可以这样用吗:"query" : {match_all: {}}, "filter": {"or":[ { "prefix": { } } .... ]
    • 是的。也可以通过使用类似于上述的 bool 过滤器或使用您编写的 BoolAnd 和 BoolOr 过滤器来使用过滤器来完成同样的操作
    • 这意味着“前缀”正在使用“或”和“和”过滤器查找?我读到“或”和“和”过滤器应该用于脚本、地理边界、选择。
    • 您可以将前缀过滤器与“or”、“and”或“Boolean”过滤器一起使用。您已正确阅读,建议在脚本/George-bounding 以外的过滤器的情况下使用布尔过滤器,因为它可以使用缓存的过滤器位集。话虽如此,您仍然可以使用“或”和“和”过滤器。它们有时是有益的,因为它们是按顺序执行的,并在它们向下传递时过滤掉结果。
    猜你喜欢
    • 2014-11-16
    • 2019-08-11
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多