Elasticsearch 查询之 多字符串多字段查询
多字符串多字段查询
在ES中,Query Context 和Filter Context 是两种不同的上下文,其主要区别在于
- Query Context 会进行相关性算分
- Filter Context,不会进行相关性算分,性能更好
在ES中如果要进行复杂的查询,那么可以使用bool Query
bool 查询
一个bool查询是一个或者多个查询子句的组合
bool查询总共包含4种子句
子句类型 | 备注 |
---|---|
must | 必须满足该条件。结果会贡献算分 |
should | 至少有一个满足条件。结果会贡献算分 |
must_not | 必须不满足该条件。属于Filter Context查询子句,结果不会算分 |
filter | 必须满足该条件。属于Filter Context查询子句,结果不会算分 |
算分,就是计算相关性。并不只是全文本检索才特有的,在yes或者no的子句中,匹配的子句越多,相关性评分就越高。如果多条查询子句被合并为一条符合查询语句,比如bool查询,则每个查询子句计算得出的评分会被合并到总的相关性评分中。
示例:
POST /products/_search
{"query": {"bool" : {"must" : {"term" : { "price" : "30" }},"filter": {"term" : { "avaliable" : "true" }},"must_not" : {"range" : {"price" : { "lte" : 10 }}},"should" : [{ "term" : { "productID.keyword" : "JODL-X-1937-#pV7" } },{ "term" : { "productID.keyword" : "XHDK-A-1293-#fJ3" } }],"minimum_should_tch" :1}}
}
意为:必须满足 price=30 并且avaliable=true 并且 price>10 或 productID ="JODL-X-1937-#pV7"或者 productID =“XHDK-A-1293-#fJ3”
bool查询中的子查询的顺序没有限制,且可以在子查询中嵌套多个子查询,如果bool查询中没有must条件,那么should中必须至少满足一条查询
bool查询语句的结构对算分的影响
bool查询语句的结构是会影响相关性算分的。
例如
//示例1
POST /animals/_search
{"query": {"bool": {"should": [{ "term": { "text": "brown" }},{ "term": { "text": "red" }},{ "term": { "text": "quick" }},{ "term": { "text": "dog" }}]}}
}//示例2
POST /animals/_search
{"query": {"bool": {"should": [{ "term": { "text": "quick" }},{ "term": { "text": "dog" }},{"bool":{"should":[{ "term": { "text": "brown" }},{ "term": { "text": "brown" }},]}}]}}
}
示例1中,所有子句在同一层级下,则具有相同的权重
示例2,同示例一虽然是一个意思,但是子句的权重不一致,通过这种嵌套的bool查询,可以改变对算分的影响
通过boost字段控制相关度算分
boost参数的含义
- 当boost > 1时,打分的相关度会相对性提升
- 当0 < boost < 1时,打分的权重相对性降低
- 当 boost < 0 时, 贡献负分
示例
DELETE blogs
POST /blogs/_bulk
{ "index": { "_id": 1 }}
{"title":"Apple iPad", "content":"Apple iPad,Apple iPad" }
{ "index": { "_id": 2 }}
{"title":"Apple iPad,Apple iPad", "content":"Apple iPad" }POST blogs/_search
{"query": {"bool": {"should": [{"match": {"title": {"query": "apple,ipad","boost": 1.1}}},{"match": {"content": {"query": "apple,ipad","boost":}}}]}}
}
解决包含而不是相等的问题
在我们 电影 索引中,有一个 genre字段,这个字段是数组,包含了多个数据,但是es中并没有数组类型,我们在查询时可能会出现这样的情况
可以看到,包含了同样关键字的数据都被查询了出来,所以索引设计上,我们需要增加一个字段,genre_count,对genre字段的数量进行统计。在查询时,使用复合查询,即可解决该问题
Elasticsearch 查询之 多字符串多字段查询相关推荐
- 【mybatis】mybatis自定义动态字段查询,mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段...
mybatis实现动态字段查询,如果某个条件为null,则不查询某个字段,否则就查询某个字段 先看一下 怎么实现动态的自定义字段查询: 例如: 而field 就是数据表中的某一个字段 String f ...
- ElasticSearch高级 (Query DSL查询 bulk批量操作 导入数据 各种查询 实战技巧-优化比重 全量与增量数据同步)
ElasticSearch高级 01-Query DSL(Domain Specific Language) 1 查询上下文 2 相关度评分:_score 3 元数据:_source 4 Query ...
- Elasticsearch+Mongo亿级别数据导入及查询实践
数据方案: 在Elasticsearch中通过code及time字段查询对应doc的mongo_id字段获得mongodb中的主键_id 通过获得id再进入mongodb进行查询 1,数据情况: ...
- 【Elasticsearch】 Elasticsearch 多字段查询 best_fields、most_fields、cross_fields,傻傻分不清楚?
1.概述 转载:Elasticsearch 多字段查询 best_fields.most_fields.cross_fields,傻傻分不清楚? 1.1 题记 Multi-match query 的目 ...
- postgresql分割字符串_postgresql 实现字符串分割字段转列表查询
在数据查询中,有一张a表存有另一张b表的id并以','隔开 如: 假设现在要关联查询关于 b表的一些信息,怎么办. 分割查询:字符串转列表函数 :regexp_split_to_table() sel ...
- es ik 多字段查询_SpringBoot使用注解的方式构建Elasticsearch查询语句,实现多条件的复杂查询...
背景&痛点 通过ES进行查询,如果需要新增查询条件,则每次都需要进行硬编码,然后实现对应的查询功能.这样不仅开发工作量大,而且如果有多个不同的索引对象需要进行同样的查询,则需要开发多次,代码复 ...
- postgresql分割字符串_postgresql 实现字符串分割字段转列表查询_PostgreSQL_数据库
在数据查询中,有一张a表存有另一张b表的id并以','隔开 如: 假设现在要关联查询关于 b表的一些信息,怎么办. 分割查询:字符串转列表函数 :regexp_split_to_table() sel ...
- ElasticSearch集成SpringData史上最全查询教程
ElasticSearch集成SpringData史上最全查询教程 1.简单介绍 springboot 使用springdata操作es,ElasticsearchRepository使用QueryB ...
- ElasticSearch查询 第四篇:匹配查询(Match)
<ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...
最新文章
- SLAM之特征匹配(二)————RANSAC--------翻译以及经典RANSAC以及其相关的改进的算法小结
- python免费入门教程-python小白如何入门,第一步要做什么?(附带免费教程)
- [转]另一个SqlParameterCollection 中已包含 SqlParameter[解决方案]
- 小议看板列与职能筒仓
- 【python】使用plt.imshow(image)显示图片一片空白,像素值有数据
- Chrome扩展应用Infinity New Tab的备份
- lucene可用中文分词IKAnalyzer,maven pom下载代码及配置文件
- 连锁行业信息化的现状与问题
- Python生成二维码
- 携程的供应链和流量逻辑|一点财经
- google,翻译英文网站
- 看不见世界的程序员,开发了一款“吃鸡”
- 业界安全事件最新动态
- ubuntu命令 图片 壁纸_[教程]Ubuntu下完整配置自动壁纸切换
- virtualBox安装centos6增强包报错解决及配置共享文件夹
- HDU-5976-Detachment
- 服务器搭建SSH暴力攻击诱饵,制作密码字典
- **购买外链必须注意的四点经验_购链网**
- java jsch_java 利用jsch端口转发 建立连接
- 指针基础*p ;**pp