php - Elasticsearch 中的AND OR查询

标签 php sql elasticsearch

我需要根据AND或OR查询动态进行 Elasticsearch 查询。

用户输入类似于SQL格式的字符串:

((("query1 query2" OR query3) OR query4) AND (query5 OR query6)) AND query7

我将其解析为数组:
[
    'AND' => [
        [
            'AND' => [
                [
                    'OR' => [
                        [
                            'OR' => [
                                '" query1 query 2"',
                                'query3'
                            ]
                        ],
                        'query4'
                    ]
                ],
                [
                    'OR' => [
                        'query5',
                        'query6'
                    ]
                ]
            ]

        ],
        'query7'
    ]

]

基于这个数组,我需要搜索一个字段。

就像是:
{"bool":{"must":[{"match":{"title":"research"}},{"match":{"title":"lecturer"}}]}}

但是我被嵌套条件困住了。请指教。

最佳答案

您可以将嵌套的bool用于嵌套条件。

((("query1 query 2" OR query3) OR query4) AND (query5 OR query6)) AND query7

可以表示为:
{
    "query" : {
        "bool":{
            "must" : [
                {           
                    "bool":{    // ((("query1 query 2" OR query3) OR query4) AND (query5 OR query6)) 
                        "must" : [  
                            {
                                "bool":{    // (("query1 query 2" OR query3) OR query4)
                                    "should" : [                                    
                                        {
                                            "bool":{    // ("query1 query 2" OR query3)
                                                "should" : [
                                                    {"match": // query1 query2},
                                                    {"match": // query3}
                                                ]
                                            }
                                        },
                                        {"match": // query4}
                                    ]
                                }
                            },
                            {
                                "bool":{    // (query5 OR query6)
                                    "should" : [
                                        {"match": // query5},
                                        {"match": // query6}
                                    ]
                                }
                            }
                        ]
                    }
                },
                {match":    //...  query7}
            ]
        }   
    }
}

关于php - Elasticsearch 中的AND OR查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45682746/

相关文章:

javascript - 按钮执行Python脚本,使用jquery?

php - 不区分大小写的 preg 替换特殊字符/Umlaute

elasticsearch - Elasticsearch查询以查找范围重叠

elasticsearch - 根据Elasticsearch查询结果制作平面数组

php - 让用户基于现有表创建表

php - 网址编码 - 解码

sql - 不带 FROM 子句的 SELECT

php - php 5.2 中的日期输入

sql - 如何使用 IN 作为完全匹配使用 SQL?

python - 从结果中排除项目