繁体   English   中英

如何在Elasticsearch中添加where子句

[英]How to add where clause in elasticsearch

我对弹性搜索很新。 我有一个弹性搜索查询,该查询返回基于关键字的数据库中存在的所有用户,但是在这里,我只需要获取活动状态为true的用户,但现在我要获取所有用户列表。

我已经构建了一个搜索查询

    {
        "from" : 0,
        "size" : 30,
        "query" : {
            "query_string" : {
                "query" : "*jhon*",
                "default_field" : "_all"
            }
        },
        "sort" : [ 
            {
                "id" : {
                    "order" : "desc"
                }
            }
        ]
    }

我正在使用像*jhon*这样的查询,但是我需要得到像jhon这样的用户的结果,并且他的活动状态应该是真的,所以我试过*"+jhon+"\\*"#activated~true"但我不是获得理想的结果。 我不知道我做错了什么。

最好为查询添加过滤器。 过滤器更快,因为它们不涉及任何评分并且被缓存。 您可以使用不同的过滤器,elasticsearch查询DSL非常灵活。 过滤器的类型取决于索引数据的方式,这取决于您的数据。 我将假设最简单的可能解决方案: 术语过滤器 看看下面的例子。

{
    "from" : 0,
    "size" : 30,
    "query" : {
        "query_string" : {
            "query" : "*jhon*",
            "default_field" : "_all"
        }
    },
    "filter" : {
        "term" : { 
            "activated" : "true" 
        }
    },
    "sort" : [ 
        {
            "id" : {
                "order" : "desc"
            }
        }
    ]
}

请注意,搜索时有不同的方法可以应用过滤器。 在我的示例中,我应用了顶级过滤器,该过滤器仅应用于搜索结果,而不应用于构面。 如果您希望它也应用于构面,您应该查看过滤后的查询 ; 您可以将当前查询包装到新的筛选查询中,而不是添加筛选器,该查询也可以包含相同的术语筛选器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM