本文介绍使用Elasticsearch进行查询的语句和代码。

查询界面如下:

知识点:

  1. must 文档必须匹配 must 选项下的查询条件,相当于逻辑运算的 AND,且参与文档相关度的评分。
  2. should 文档可以匹配 should 选项下的查询条件也可以不匹配,相当于逻辑运算的 OR,且参与文档相关度的评分。
  3. must_not 与 must 相反,匹配该选项下的查询条件的文档不会被返回;需要注意的是,must_not 语句不会影响评分,它的作用只是将不相关的文档排除。
  4. filter 和 must 一样,匹配 filter 选项下的查询条件的文档才会被返回,但是 filter 不评分,只起到过滤功能,与 must_not 相反。

一 直接查询


对于ID,只有一条数据,直接查询数据库,使用聚簇索引,结果及时精确。

二 精确匹配


对于会员ID,类型为integer,使用filter过滤,term表示完全匹配,直接通过倒排索引对搜索词进行查找

"query"{"bool":{"filter":[{"term":{"ctmid":"117303"}}]}
},
$aSearchParams['query']['bool']['filter'][] = ['term' => ['ctmid' => '117303']];

注意:这里的ctmid是整型,不会被分词。

三 模糊匹配

对于Email,类型为text,使用match模糊匹配,先进行分词解析,然后匹配查找

"query":{"bool":{"filter":[{"match":{"jobemail":"apple@51job.com"}}]}
},
$aSearchParams['query']['bool']['filter'][] = ['match' => ['email' => 'apple@51job.com']];

四 前缀匹配

输入职位名联想,使用prefix前缀查询,返回用aggs进行分组统计

"query":{"prefix":{"jobname":"i"}
},
"size":"0",
"aggs":{"group_by_key":{"terms":{"field":"jobname","include":"i.*"}}}}
$aSearchParams['query']['prefix'] = ['jobname' => 'i'];
$aSearchParams['aggs']['group_by_key']['terms'] = ['field' => 'jobname','include' => 'i.*'];

五 完整匹配


对于职位名字段,类型为text,比如输入“开发工程师”,需要输出所有包含“开发工程师”的职位,但是不允许“开发XX工程师”。

选择使用match_phrase,首先把内容分词,分词器可以自定义,同时文档还要满足以下两个条件:

  1. 分词后所有词项都要出现在该字段中(相当于 and 操作)。
  2. 字段中的词项顺序要一致。
{"must": {"bool": {"should": [{"match_phrase": {"jobname": {"query":"开发工程师","slop":"0", //允许间隔"zero_terms_query":"NONE", //不匹配}}}],"minimum_should_match":"1", //最低匹配度"boost":1 //权重}}
}
$aSearch = ['match_phrase'=>['jobname'=>['query'=>'开发工程师','slop'=>'0','zero_terms_query'=>'NONE',]
]];$aESParams['bool']['should'][] = $aSearch;
$aESParams['bool']['minimum_should_match'] = '1';
$aESParams['bool']['boost'] =  1.0;
$aSearchParams['query']['bool']['must'] = $aESParams;

六 范围匹配


对于date这样日期类型的字段,通常需要范围查询,使用 gt > gte >= 和 lt < lte <= 标识上下限。

"query":{"bool":{"filter":[{"term":{"range":{"date":{"gte":"2021-09-30","lt":"2022-10-01"}}}]}},
 foreach ($p_aParams['date'] as $key => $value){switch($key){case '1':$aDate = ['gt'=>$value];break;case '2':$aDate = ['lt'=>$value];break;}}
$aSearchParams['query']['bool']['filter'][] = ['range' => [trim($key) => $sRange]];

Elasticsearch的查询相关推荐

  1. elasticsearch 分页查询实现方案——Top K+归并排序

    elasticsearch 分页查询实现方案 1. from+size 实现分页 from表示从第几行开始,size表示查询多少条文档.from默认为0,size默认为10, 注意:size的大小不能 ...

  2. Elasticsearch聚合查询案例分享

    为什么80%的码农都做不了架构师?>>>    Elasticsearch聚合查询案例分享 1.案例介绍 本文包含三个案例: 案例1:统计特定时间范围内每个应用的总访问量.访问成功数 ...

  3. elasticsearch高亮显示查询结果

    elasticsearch高亮显示查询结果 //高亮显示查询结果 @Test public void demo9() throws Exception{//创建连接搜索服务器的对象Client cli ...

  4. ElasticSearch各种查询对象Query的使用

    ElasticSearch各种查询对象Query的使用 ElasticSearch提供QueryBuilders.queryStringQuery(要搜索的内容)查询方法,对所有字段进行分词查询. 分 ...

  5. 【ElasticSearch】ElasticSearch 嵌套查询:如何搜索嵌入的文档

    1.概述 翻译:https://www.bmc.com/blogs/elasticsearch-nested-searches-embedded-documents/ ElasticSearch 有时 ...

  6. ElasticSearch 高级查询语法

    ElasticSearch 高级查询语法Query DSL ES倒排索引 ES高级查询Query DSL 查询所有 match_all 分页查询form 深分页查询Scroll 指定字段排序sort ...

  7. elasticsearch的查询器query与过滤器filter的区别

    很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单-  当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...

  8. php聚合查询,php elasticsearch 聚合查询(Aggregation)

    Elasticsearch中的聚合查询,类似SQL的SUM/AVG/COUNT/GROUP BY分组查询,主要用于统计分析场景. 这里主要介绍PHP Elasticsearch 聚合查询的写法,如果不 ...

  9. ElasticSearch 组合查询(must not_must should filter)

    ElasticSearch 组合查询(must not_must should filter) ElasticSearch Demo: package org.ssgroup;import java. ...

最新文章

  1. instagram api java_如何在没有用户交互的情况下获得instagram access_token(新api)?...
  2. 基本概念之dos和cmd的区别
  3. 谈谈网站设计时图片的使用
  4. ffmpegframegrabber 时间戳不同步_多传感器融合中的时间硬同步1-论文阅读
  5. spring简单入门,入门案列的执行流程,图例
  6. gorm preload 搜索_文件太多忘记了文件放在什么地方?那你可以试试这款文件搜索工具...
  7. WSUS专题之二:部署与规划1
  8. 什么是JAX-RS注释? (第2部分)
  9. RedHat Enterprise AS4安装步骤
  10. Python编写学生类计算年龄、成绩等级
  11. Ubuntu系统上安装微信
  12. 算法 排序 python 实现--堆排序
  13. 有锚点的链接页面刷新的问题
  14. Wampserver查看php配置信息
  15. network secruity studay day4
  16. 英语背单词有用吗_学英语千万不要背单词 背单词有效吗
  17. 欢迎大家在这里提交CSDN博客程序出现的问题
  18. 2021辽宁省大学生程序设计竞赛 题解
  19. scada系统集成_企业IT系统集成之PLM、ERP、MES/MOM...
  20. 微信开发者工具,page里面的data在js的方法里面修改

热门文章

  1. python案例——数学问题案例
  2. Python安装Pillow时出现The headers or library files could not be found for zlib/jpeg错误
  3. 前端开发:JS中关于正则表达式的使用汇总
  4. 瀚高数据库故障诊断指导方案
  5. Oracle数据库管理每周一例-第十七期 ADG
  6. Linux基本操作知识一
  7. Core Data 详解
  8. ceph L版本相对于J版本在scrub机制上做的优化
  9. Java中数组的定义和使用
  10. set集合关系及特点