ElasticSearch的查询query DSL和过滤filter DSL

博客不敢常写,主要怕付出不够误导别人。。

但是又想写下来记录一下,所以特此声明:以下总结可能是错误的,请读者自行分辨,我尽量写的准确些。

首先吐槽下,ES的官方文档写的真是烂,然后网上的信息又极其的混乱,逼我硬是得自己写博客。

正文开始

*************************************

query DSL用来做搜索的,搜索就是尽可能把所有相关的内容都查出来;

filter DSL是用来做过滤的,过滤就是从所有数据中精确找到自己想要的;

网上的资料,query DSL的居多。我的问题是:如果你只想做filter怎么办呢?

方法一:最外层还是要query,然后跟一个constant_score,然后再跟一个filter。例如:

{
    "query" : {
        "constant_score" : { 
            "filter" : {
                "term" : {"author":"kimchy"}
            }
        }
    }
}

方法二:同时使用query和filter查询,使用 {query:{filtered:{}}} 来包含这两个查询语法。只是其中的query查询可省略。例如:

ES 5.0版本以前

{
    "query": {
        "filtered": {
            "query": { "match_all": {}},
            "filter": { "term": { "folder": "inbox" }}
        }
    }
}

省略query后,可以变成:

{
    "query": {
        "filtered": {
            "filter": { "term": { "folder": "inbox" }}
        }
    }
}

ES 5.0版本以后,其中must语句最好还是保留。

{
    "query": {
        "bool": {
            "must": { "match_all": {}},
            "filter": { "term": {"author":"kimchy"}}
        }
    }
}

其它的,遇到了再补充详细吧~

 

参考资料:

https://www.cnblogs.com/ghj1976/p/5293250.html

http://xiaorui.cc/2015/11/09/elasticsearch%E7%9A%84%E6%9F%A5%E8%AF%A2%E5%99%A8query%E4%B8%8E%E8%BF%87%E6%BB%A4%E5%99%A8filter%E7%9A%84%E5%8C%BA%E5%88%AB/

https://www.jianshu.com/p/6bdc3b37713b

https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-bool-query.html

你可能感兴趣的:(ElasticSearch)