适用于任何搜索的elasticsearch通用查询

时间:2015-05-12 05:54:00

标签: php jquery elasticsearch

我对我的审计项目的通用查询感到困惑,该项目包含超过一百万条记录。是否有使用我的php或jquery代码生成的通用查询?我所能得到的就是到这里,我使用ANDOR运营商来做同样的事情:

    {
    "filter": {
        "AND": {
            "filters": [
                {
                    "term": {
                        "age": "28"
                    }
                }
            ]
        },
        "OR": {
            "filters": [
                {
                    "term": {
                        "name": "varsh"
                    }
                }
            ]
        }
    }
}

有什么办法让我可以使用任何运算符和任何字段来搜索?我的UI看起来像这个enter image description here

1 个答案:

答案 0 :(得分:0)

我们的应用程序采用了相同的方法。用户可以使用类似的UI构建自己的查询(唯一的区别是我们有子组,因此您可以使用嵌套查询。)

我们使用AST来存储用户查询,例如:

["a",["o",[{"t":"generic.content","o":"contains","a":"@username"},{"t":"generic.content","o":"contains","a":"#username"]],["a",[{"t":"generic.content","o":"contains","a":"other thing"},{"t":"generic.content","o":"contains","a":"yet another thing"}]],["o",[{"t":"generic.lang","o":"equals_lang","a":"fr"},{"t":"generic.lang","o":"equals_lang","a":"en"}]]]

其中[" a",[]]是带AND运算符的组,[" o",[]]是带OR运算符的组。

然后我们使用此AST动态地使用bool查询(http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html)构建Elasticsearch查询。

在我们的格式中,否定是操作员级别的句柄(包含vs!contains),但你可以有一组NOT运算符,如[" n",[]]