首页 > 其他分享 >15-DSL查询语法-复合查询-布尔查询

15-DSL查询语法-复合查询-布尔查询

时间:2023-05-22 14:33:12浏览次数:44  
标签:算分 15 参与 查询 filter DSL 搜索 must

布尔查询是一个或多个查询子句的组合,每一个子句就是一个子查询。子查询的组合方式有:

(1)must:必须匹配每个子查询,类似“与”

(2)should:选择性匹配子查询,类似“或”

(3)must_not:必须不匹配,不参与算分,类似“非”

(4)filter:必须匹配,不参与算分

比如在搜索酒店时,除了关键字搜索外,我们还可能根据品牌、价格、城市等字段做过滤:

每一个不同的字段,其查询的条件、方式都不一样,必须是多个不同的查询,而要组合这些查询,就必须用bool查询了。

需要注意的是,搜索时,参与打分的字段越多,查询的性能也越差。因此这种多条件查询时,建议这样做:

  • 搜索框的关键字搜索,是全文检索查询,使用must查询,参与算分

  • 其它过滤条件,采用filter查询。不参与算分

 语法示例

 示例

需求:搜索名字包含“凯悦”,价格不低于1000,在坐标31.21,121.5周围10km范围内的酒店。

分析:

  • 名称搜索,属于全文检索查询,应该参与算分。放到must中

  • 价格不低于1000,用range查询,属于过滤条件,不参与算分。放到must_not中

  • 周围10km范围内,用geo_distance查询,属于过滤条件,不参与算分。放到filter中

 1 #布尔查询
 2 GET /hotel/_search 
 3 {
 4   "query":{
 5     "bool":{
 6       "must": [
 7         {
 8           "match": {
 9             "name": "凯悦"
10           }
11         }
12       ],
13       "must_not": [
14         {
15           "range": {
16             "price": {
17               "lte": 1000
18             }
19           }
20         }
21       ],
22       "filter": [
23         {
24           "geo_distance": {
25             "distance": "10km",
26             "location": {
27               "lat": 31.21,
28               "lon": 121.5
29             }
30           }
31         }
32       ]
33     }
34   }
35 }
View Code

 

标签:算分,15,参与,查询,filter,DSL,搜索,must
From: https://www.cnblogs.com/liaowenhui/p/17420417.html

相关文章

  • [atARC153F]Tri-Colored Paths
    称一条边在环外当且仅当其两端点不全在环上用总方案数减去不合法的方案数,并分类讨论——Case1:图中不存在某种颜色的边否则,若存在简单环的颜色集合为\(\{1,2,3\}\),则环上每种颜色的边恰有一条否则,若颜色为\(1\)的边数\(\ge2\),则去掉其中一条后得到的简单路径矛盾记环上......
  • MySQL 查询数据库表的数量
    MySQL查询数据库表的数量 1.获取指定数据库的表的数量SELECTCOUNT(*)TABLES,table_schemaFROMinformation_schema.TABLESGROUPBYtable_schema; 2.获取mysql下所有数据库表的数量SELECTCOUNT(*)TABLES,table_schemaFROMinformation_schema.TABLESWHEREtable_......
  • 分享几个默认密码在线查询网站
    网络设备忘记了密码,不要慌,先看一下厂家和型号,找找产品手册,不行就在线查一查,比如下面这几个网站,说不定有惊喜。本文分享几个默认密码在线查询网站,仅用于用户找回默认密码,不许干坏事哦。网站所提供的管理员默认密码均出于研究目的以及合法用途。1、HUAWEI默认账号/密码查询工具提供......
  • 14-DSL查询语法-复合查询-算分函数查询
     复合(compound)查询:复合查询可以将其它简单查询组合起来,实现更复杂的搜索逻辑。常见的有两种:(1)fuctionscore:算分函数查询,可以控制文档相关性算分,控制文档排名(2)boolquery:布尔查询,利用逻辑关系组合多个其它的查询,实现复杂搜索 相关性算分当我们利用match查询时,文档结果会根据......
  • 上周热点回顾(5.15-5.21)
    热点随笔:· 我试图通过这篇文章告诉你,这行源码有多牛逼。 (why技术)· 纪念陈皓(左耳朵耗子) (陈硕)· 园子的商业化努力-AI人才服务:招募AI导师 (博客园团队)· 记一次.NET某医院门诊软件卡死分析 (一线码农)· 【趣话计算机底层技术】一个故事看懂各种锁 (轩辕之风)......
  • 遇到的问题之"数据库编写SQL-》子查询中加入limit报错:This version of MySQL doesn't
    一、问题 >1235-ThisversionofMySQLdoesn'tyetsupport'LIMIT&IN/ALL/ANY/SOMEsubquery'二、原因/解决方案这个错误通常是由于MySQL版本太旧导致的。在旧版本的MySQL中,无法在子查询中使用LIMIT和IN/ALL/ANY/SOME子查询。您需要升级到MySQL的较新版本,以解决......
  • Oracle 查询数据库表的数量
    Oracle查询数据库表(查看当前用户下的表)的数量SELECTcount(*)FROMsys.user_tables;  统计表中记录数量 第一步:新增count_rows函数   CREATEORREPLACEFUNCTIONcount_rows(      table_nameINvarchar2,      ownerINvarchar2:=NULL ......
  • sqlserver 查询慢语句
    SELECTTOP10total_worker_time/1000AS[自编译以来执行所用的CPU时间总量(ms-毫秒)],total_elapsed_time/1000as[完成执行此计划所用的总时间],total_elapsed_time/execution_count/1000as[平均完成执行此计划所用时间],execution_countas[上次编译以来所执行......
  • [atARC156F]Make Same Set
    考虑网络流,具体建图如下:整张图共\(4\)层,用\((i,j)\)表示第\(i\)层的第\(j\)个点,则边集包含从\(S\)向\((1,i)\)连流量为\(1\)的边从\((1,i)\)向\((2,a_{i})\)和\((2,b_{i})\)连流量为\(1\)的边从\((2,i)\)向\((3,i)\)连流量为\(1\)的边从\((3,a_{i})\)和\((3,c_{i})\)向\((4,......
  • 手动实现分页查询(菜鸟版)
    publicMap<String,Object>selectPage(IntegerpageNum,IntegerpageSize,Stringusername,Stringemail,Stringaddress){//拼接sqlusername="%"+username+"%";email="%"+email+"%";address=&qu......