Elasticsearch的查询
本文介绍使用Elasticsearch进行查询的语句和代码。
查询界面如下:
知识点:
- must 文档必须匹配 must 选项下的查询条件,相当于逻辑运算的 AND,且参与文档相关度的评分。
- should 文档可以匹配 should 选项下的查询条件也可以不匹配,相当于逻辑运算的 OR,且参与文档相关度的评分。
- must_not 与 must 相反,匹配该选项下的查询条件的文档不会被返回;需要注意的是,must_not 语句不会影响评分,它的作用只是将不相关的文档排除。
- 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,首先把内容分词,分词器可以自定义,同时文档还要满足以下两个条件:
- 分词后所有词项都要出现在该字段中(相当于 and 操作)。
- 字段中的词项顺序要一致。
{"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的查询相关推荐
- elasticsearch 分页查询实现方案——Top K+归并排序
elasticsearch 分页查询实现方案 1. from+size 实现分页 from表示从第几行开始,size表示查询多少条文档.from默认为0,size默认为10, 注意:size的大小不能 ...
- Elasticsearch聚合查询案例分享
为什么80%的码农都做不了架构师?>>> Elasticsearch聚合查询案例分享 1.案例介绍 本文包含三个案例: 案例1:统计特定时间范围内每个应用的总访问量.访问成功数 ...
- elasticsearch高亮显示查询结果
elasticsearch高亮显示查询结果 //高亮显示查询结果 @Test public void demo9() throws Exception{//创建连接搜索服务器的对象Client cli ...
- ElasticSearch各种查询对象Query的使用
ElasticSearch各种查询对象Query的使用 ElasticSearch提供QueryBuilders.queryStringQuery(要搜索的内容)查询方法,对所有字段进行分词查询. 分 ...
- 【ElasticSearch】ElasticSearch 嵌套查询:如何搜索嵌入的文档
1.概述 翻译:https://www.bmc.com/blogs/elasticsearch-nested-searches-embedded-documents/ ElasticSearch 有时 ...
- ElasticSearch 高级查询语法
ElasticSearch 高级查询语法Query DSL ES倒排索引 ES高级查询Query DSL 查询所有 match_all 分页查询form 深分页查询Scroll 指定字段排序sort ...
- elasticsearch的查询器query与过滤器filter的区别
很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单- 当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...
- php聚合查询,php elasticsearch 聚合查询(Aggregation)
Elasticsearch中的聚合查询,类似SQL的SUM/AVG/COUNT/GROUP BY分组查询,主要用于统计分析场景. 这里主要介绍PHP Elasticsearch 聚合查询的写法,如果不 ...
- ElasticSearch 组合查询(must not_must should filter)
ElasticSearch 组合查询(must not_must should filter) ElasticSearch Demo: package org.ssgroup;import java. ...
最新文章
- instagram api java_如何在没有用户交互的情况下获得instagram access_token(新api)?...
- 基本概念之dos和cmd的区别
- 谈谈网站设计时图片的使用
- ffmpegframegrabber 时间戳不同步_多传感器融合中的时间硬同步1-论文阅读
- spring简单入门,入门案列的执行流程,图例
- gorm preload 搜索_文件太多忘记了文件放在什么地方?那你可以试试这款文件搜索工具...
- WSUS专题之二:部署与规划1
- 什么是JAX-RS注释? (第2部分)
- RedHat Enterprise AS4安装步骤
- Python编写学生类计算年龄、成绩等级
- Ubuntu系统上安装微信
- 算法 排序 python 实现--堆排序
- 有锚点的链接页面刷新的问题
- Wampserver查看php配置信息
- network secruity studay day4
- 英语背单词有用吗_学英语千万不要背单词 背单词有效吗
- 欢迎大家在这里提交CSDN博客程序出现的问题
- 2021辽宁省大学生程序设计竞赛 题解
- scada系统集成_企业IT系统集成之PLM、ERP、MES/MOM...
- 微信开发者工具,page里面的data在js的方法里面修改