lasticsearch的查询有两部分组成:query and filter。
两者的主要区别在于:filter是不计算相关性的,同时可以cache。因此,filter速度要快于query。
先记录一下es提供的各种query。
以下内容只为当做读书笔记,更多详细细节请参见http://www.elasticsearch.org/guide/
第一部分:query
在需要full-text-search和需要计算相关性的情况下,用query。而filter满足不了需求。
(1)match query and multi-match query //and match-all query and minimum should match query
match queries没有“query parsing”的过程,field不支持通配符,前缀等高级特性,只是参照指定的文本进行analysis,执行query,因此失败几率极小,适合search-box。
analyzed类型的query,故可指定analyzer
operator可指定or/and
zero-terms-query可指定none/all
cutoff-frequency可指定absolute值或者relative值
match-phase query可指定slot值,参见后续的search-in-depth
match-phase-prefix query可指定max_expansion
(2)multi-match query
分别执行为单个field的match的查询。因此最终_score值的计算规则各异。
fields可指定执行需要查询的字段,field可以支持通配符等高级特性(match query是不支持的),field可支持(^)指定各个field的boost权重
types可指定以下值,区分不同的查询行为:
best _fields:_score决定于得分最高的match-clause。field-centric
most_fields:所有match-clause都会考虑在内。field-centric
cross-fields:把fileds当做一个big-fields。term-centric
phase and phase-prefix:每个field执行相应的query,combine the score
以上都有具体的应用场景和详细的计算规则,具体请参见后续的search-in-depth。
(3)bool query
一种复合查询,把其余类型的查询包裹进来。支持以下三种逻辑关系。
must: AND
must_not:NOT
should:OR
(4)boosting query
一种复合查询,分为positive子查询和negitive子查询,两者的查询结构都会返回。
positive子查询的score保持不变,negetive子查询的值将会根据negative_boost的值做相应程度的降低。
(5)common term query
一种略高级的查询,充分考虑了stop-word的低优先级,提高了查询精确性。
将terms分为了两种:more-importent(low-frequency) and less important(high-frequency)。less-important比如stop-words,eg:the and。
分组标准由cutoff_frequence决定。两组query构成bool query。must应用于low_frequence,should应用high_frequence。
每一组内部都可以指定operator和mini_should_match。
如果group后只有一组,则默认退化为单组的子查询。
query执行中首先match到more-import这一组的doc,然后在这个基础上去match less-import,并且计算只计算match到的score。保证了效率,也充分考虑了relevance。
(6)constant score query
不计算相关性的query。沿用index过程中指定的score,。
(7)dismax query
对子查询的结果做union,score沿用子查询score的最大值。这种查询广泛应用于muti-field的查询。具体可以参见后续更新search-in-depth
(8)filtered query
combine another query with any fillter。
如果不指定query,默认为match_all。当应用多个fitler的时候,可以指定strategy属性,expert-level。
(9)fuzzy query and fuzzy like this query and fuzzy like this field query
fuzzy query :主要根据fuzziniess和prefix_length进行匹配distance查询。根据type不同distance计算不一样。
numeric类型的distance类似于区间,string类型则依据Levenshtein distance,即从一个stringA变换到另一个stringB,需要变换的最小字母数。
如果指定为AUTO,则根据term的length有以下规则:
0-1:完全一致
1-4:1
>4:2
推荐指定prefix_length,表明这个范围的字符需要精准匹配,如果不指定prefix_lengh和fuzziniess参数,该查询负担较重。
(10)function score query
定义function去改变doc的score
(11)geoshape query
基于地理位置的查询
(12)has child query and has parent query and top children query
默认跟filter一样,query是包裹了一个constant_score的filter。也有相关score的支持。
has_child:匹配child字段,返回匹配到的对应的parent的结果。
has_parent:匹配parent字段,返回匹配到对应child的结果。
top_children query:has_child query的一种,也是查询child字段,不过增加可控制参数,通过factor,incremental_factor以及query的size来确定子查询的次数,直到满足
size为止,因此,可能需要多轮迭代子查询,所以total_hits有可能是不准确的。
(13)ids query
查询指定id。
(14)indices query
在多个索引之中查询,允许提供一个indics参数指定将要查询的索引及相关的查询,同时指定no_match_query在indecs之外的索引中查询,返回结果。
(15)more like this and more like this field query
根据指定的like_text,经过analysis生成若干个基于term的should查询合并成一个bool查询。
min_term_freq/max_term_freq/max_term_num:限制interesting term。
percentage_terms_to_match:限制should查询应该满足的term比例。
more like this query 可指定多个field字段,more like this field query 则在一个field上查询。
(16)nested query
内嵌类型的查询,指定完整的path。
(17)prefix query
前缀查询。
(18)query string query and simple query string query
基于lucence查询语法的查询,指定字段/term/boost等。
simple query string query 跟 query string类似,这是会自动放弃invalid的部分,不会抛出异常。
默认的field是_all。
(19)range query and regrex query and wildcard query
range query:区间查询,日期/string/num。
regrex query:正则查询。
wildcard query:通配符查询。
(20)span-*query
(21)term query and terms query
基于term的查询。
(22)template query
注册一个查询模板,指定模板查询。
--------------------------
后续计划更新:
(1)一些特殊查询的比较。比如fuzzy 跟 more_like等。
(2)search-in-depth
http://www.cnblogs.com/zhangchenliang/p/4195406.html
http://blog.csdn.net/dm_vincent/article/details/41720193
http://blog.csdn.net/dm_vincent/article/details/42757519
相关推荐
分享一套完整版视频课程——分布式搜索引擎Elasticsearch开发实战基础篇 (ElasticSearch、ELK、搜索引擎、Lucene),本教程旨在带领大家进入搜索引擎领域,从无到有,深入浅出的讲解了什么是搜索引擎,搜索引擎的...
Java语言程序设计-基础篇+进阶篇-原书第10版(含课后习题答案和书中代码示例) 这一 版从表述 、组织、示例、练习题以及附录方面都进行了极大的增强,包括: • 用JavaFX取代了Swing。JavaFX是一个用于开发JaVaGUI...
2020谷粒商城笔记资料,谷粒商城2020文档课件笔记+源代码(基础篇+高级篇) 谷粒商城2020文档课件笔记+源代码...elasticsearch,本地事务、分布式事务及seata,nacos、gateway、sentinel、sleuth等等,都已经归好类了。
elk Elasticsearch全套学习视频,基础篇,进阶篇,第二版, 基于Elasticsearch最新版本 价值2000,买过下载好的分享给大家,无加密 原课程地址 ...
真正的海量技术栈,虽然是3个JAVA的大型项目集群课程,但是其中却包含了非常的技术内容,非常的强大,推荐给有JAVA开发基础和工程师们进行学习...├─103、全文检索-ElasticSearch-Docker安装ES.avi ├─104、全文检索
本教程旨在带领大家进入搜索引擎领域,从无到有,深入浅出的讲解了什么是搜索引擎,搜索引擎的作用以及ElasticSearch在实际工作中的作用等。
Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene:trade_mark: 基础之上...在上一篇文章中介绍了ElasticSearch的简单使用,接下来记录一下ElasticSearch的查询: 查询所有数据 # 搜索所有
这个《核心知识篇(上半季)》,其实主要还是打基础,包括核心的原理,还有核心的操作,还有部分高级的技术和操作,大量的实验,大量的画图,最后初步讲解怎么使用java api 《核心知识篇(下半季)》,包括深度讲解...
高级篇\课件\06、ElasticSearch.pdf 高级篇\课件\07、异步&线程池.pdf 高级篇\课件\08、单点登录与社交登录.pdf 高级篇\课件\09、商城业务.pdf 高级篇\课件\10、RabbitMQ.pdf 高级篇\课件\11、支付.pdf 高级篇\课件\...
1、基础篇 2、JVM篇 3、多线程&并发篇 4、Spring篇 5、MyBatis篇 6、SpringBoot篇 7、MySQL篇 8、Redis篇 9、SpringCloud篇 10、Nginx篇 11、zookeeper篇 12、kafka篇 13、MQ篇 14、Elasticsearch篇 15、Linux篇 16...
技术胖说:Deno(v8引擎) 有可能代替 node 前言 什么是 TypeScript? TypeScript 是一种由微软开发的自由和开源的编程语言 它是 JavaScript 的一个超集,扩展了 JavaScript 的语法。 TypeScript是属于编程语言,...
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE
3. 编译并运行SDK官方例程,并移植并运行QT官方的OpenGLES例子程序; 4. 运行一个8路1080P60导播台程序以及一个多路4KP30解码加多画面合成4K输出的测试程序; 5. 以上所讲内容所涉及的一些相关概念、知识点的讲解; 6. ...
本书共分两篇,第一篇介绍了Android 3D游戏开发的基础知识,主要对OpenGL ES的相关内容进行了介绍。 章 名主 要 内 容 第1章 英雄还看今朝—Android简介本章介绍了市场上主流的手机平台,同时也分析了未来手机...
基于东软载波es32+RT-Thread RTOS入门实战篇-如何快速构建一个智能小车
X5-40SSC-S定位篇15讲(台版教程) FX5-40SSC-S同步控制篇5...送FX5U 主机4轴 外带4个FX5-16ES/ET-H 8轴 一起12轴程序案例 FX5U 标准伺服定位程序 FX5U10轴CCLINK_CCD大型程序 送60集入门基础教程 送WORKS3 FX5U编程软件
FX5-40SSC-S定位篇15讲(台版教程) FX5-40SSC-S同步控制篇...送FX5U 主机4轴 外带4个FX5-16ES/ET-H 8轴 一起12轴程序案例 FX5U 标准伺服定位程序 FX5U10轴CCLINK_CCD大型程序 送60集入门基础教程 送WORKS3 FX5U编程软件
Java语言的经典教材,多年来...本书全面整合了Java 8的特性,采用“基础优先,问题驱动”的教学方式,循序渐进地介绍了程序设计基础、解决问题的方法、面向对象程序设计、图形用户界面设计、异常处理、I/O和递归等内容
基础篇 JVM篇 多线程&并发篇 Spring篇 Mybatis篇 SpringBoot篇 Mysql篇 SpringCloud篇 Dubbo篇 Ngnix篇 MQ篇 数据结构算法篇 Linux篇 Zookeeper篇 Redis篇 分布式篇 网络篇 设计模式 maven篇 ElasticSearch篇 ...