设为首页 加入收藏

TOP

02 ES(Elasticsearch)查询工具设计
2023-07-25 21:30:53 】 浏览:34
Tags:Elasticsearch 查询工

一 原理知识

Bool查询包括四种子句:

  • must
  • filter
  • should
  • must_not

1.must
文档 必须 匹配这些条件才能被包含进来。
相当于sql中的 and

2.must_not
文档 必须不 匹配这些条件才能被包含进来。
相当于sql中的 not

3.should
如果满足这些语句中的任意语句,将增加 _score ,否则,无任何影响。它们主要用于修正每个文档的相关性得分。
相当于sql中的or

4.filter
必须 匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。

区别:
must:返回的文档必须满足must子句的条件,并且参与计算分值
filter:返回的文档必须满足filter子句的条件。但是跟Must不一样的是,不会计算分值, 并且可以使用缓存
must和filter是一样的。区别是场景不一样。如果结果需要算分就使用must,否则可以考虑使用filter,使查询更高效。

注意:

当使用should查询时,如果包含了must或者filter查询,那么should的查询语句就不是或者【OR】的意思了,而是有或者没有都行的含义。filter和should语句组合查询,会导致should语句失效。

 1 搜索 (state = 0 或者 state不存在的记录) and payState = 1  
 2 {
 3         query: {
 4           bool: {
 5             filter: [{
 6                 "bool": {
 7                   "should": [
 8                     { "term": { "state": 0 } },
 9                     { "bool": { "must_not": { "exists": { "field": "state" } } } }
10                   ]
11                 }
12               },
13               { term: { payState: 1 } }
14             ]
15  
16           }
17         }
18       }
19 }
View Code

二 设计

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇2023年4月21日-关于远程feign调用.. 下一篇hackathon 复盘:niche 海外软件..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目