博客不敢常写,主要怕付出不够误导别人。。
但是又想写下来记录一下,所以特此声明:以下总结可能是错误的,请读者自行分辨,我尽量写的准确些。
首先吐槽下,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
https://www.jianshu.com/p/6bdc3b37713b
https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-bool-query.html