如何在elasticsearch中添加where子句

时间:2013-04-15 12:16:29

标签: java elasticsearch

您好我对elasticsearch很新,这里我有一个弹性搜索,它返回基于关键字的数据库中的所有用户,但在这里我只需要获得活动状态为true的用户,但现在我得到所有用户列表

我得到像

这样的搜索引擎
{
    "from" : 0,
    "size" : 30,
    "query" : {
        "query_string" : {
            "query" : "*jhon*",
            "default_field" : "_all"
        }
    },
    "sort" : [ 
        {
            "id" : {
                "order" : "desc"
            }
        }
    ]
}

我正在使用像“*”+ jhon +“*”之类的查询但是我需要获得名为Jhon的用户的结果,并且他的活动状态为true所以我尝试了“*”+ jhon +“*”#激活〜真“但我没有得到理想的结果不知道我哪里出错了?

1 个答案:

答案 0 :(得分:5)

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

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

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