elasticsearch的查询有两部分组成: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

elasticsearch-查询基础篇的更多相关文章

  1. ElasticSearch查询 第二篇:文档更新

    <ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...

  2. ElasticSearch查询 第一篇:搜索API

    <ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...

  3. 我叫Mongo,收了「查询基础篇」,值得你拥有

    这是mongo第二篇「查询基础篇」,后续会连续更新6篇 mongodb的文章总结上会有一系列的文章,顺序是先学会怎么用,在学会怎么用好,戒急戒躁,循序渐进,跟着我一起来探索交流. 通过上一篇基础篇的介 ...

  4. 六、select查询基础篇

    前言: DQL(Data QueryLanguage):数据查询语言,通俗点讲就是从数据库获取数据的,按照DQL的语法给数据库发送一条指令,数据库将按需求返回数据. 一.基本语法 select 查询的 ...

  5. ElasticSearch查询 第五篇:布尔查询

    布尔查询是最常用的组合查询,不仅将多个查询条件组合在一起,并且将查询的结果和结果的评分组合在一起.当查询条件是多个表达式的组合时,布尔查询非常有用,实际上,布尔查询把多个子查询组合(combine)成 ...

  6. ElasticSearch查询 第四篇:匹配查询(Match)

    <ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...

  7. ElasticSearch查询 第三篇:词条查询

    <ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...

  8. 我叫Mongo,干了「查询终结篇」,值得您拥有

    这是mongo第三篇"查终结篇",后续会连续更新5篇 mongodb的文章总结上会有一系列的文章,顺序是先学会怎么用,在学会怎么用好,戒急戒躁,循序渐进,跟着我一起来探索交流. 通 ...

  9. 3.高并发教程-基础篇-之分布式全文搜索引擎elasticsearch的搭建

    高并发教程-基础篇-之分布式全文搜索引擎elasticsearch的搭建 如果大家看了我的上一篇<2.高并发教程-基础篇-之nginx+mysql实现负载均衡和读写分离>文章,如果能很好的 ...

  10. 白日梦的Elasticsearch笔记(一)基础篇

    目录 一.导读 1.1.认识ES 1.2.安装.启动ES.Kibana.IK分词器 二.核心概念 2.1.Near Realtime (NRT) 2.2.Cluster 2.3.Node 2.4.In ...

随机推荐

  1. 感觉没睡好就..-shenmedoumeixie....

    hi 昨晚没睡好,虽然梦很香,但睡不好没精神做科研啊... 1.jQuery 十二.实现聊天室创建 12.1 基本功能 登陆: 无刷新实时交流: 支持表情. 12.2 大致效果 登陆——>验证, ...

  2. Hadoop_MapReduce流程

    Hadoop学习笔记总结 01. MapReduce 1. Combiner(规约) Combiner号称本地的Reduce. 问:为什么使用Combiner? 答:Combiner发生在Map端,对 ...

  3. 解决android中Layout文件下的xml文件配好后,R类中不能自动生成相应代码

    不能更新的原因: 1.在xml文件中代码错误或者格式错误 2.eclipse 编译器是老版本 3.布局文件的文件名有大写字母 4.含有相同文件名.格式的xml文件 解决方法: 1.找到出错的xml文件 ...

  4. Objective-C if语句处理 BOOL值不为1和0的情况

    BOOL ,布尔值,在Objective-C ,BOOL类型被typedef为signed char(有符号的整型),YES被#define为1,NO被#define为0. 事实上,xcode的编译器 ...

  5. Unity热门插件推荐

    前言 Unite2015的笔记 ,本文所提到的扩展主要针对 mobile上使用. 文中资源在Asset Store描述的截图日期:2016-04-28 Mesh Baker https://www.a ...

  6. vijos1334 NASA的食物计划(二维费用的背包问题)

    背景 NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安 全技术问题一直大伤脑筋,因此在各方压力下终止了航天 飞机的历史,但是此类事情会不会在以后发生,谁也无法 保证,在遇到这类航天问题时,解决方 ...

  7. JS原型与原型链终极详解

    一. 普通对象与函数对象  JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函数对象.下面举例说明 function f ...

  8. HTML-学习笔记(文本格式化,引用,计算机代码)

    HTML 可定义很多供格式化输出的元素,比如粗体和斜体字. <b>定义粗体字体 <p>这是一段<b>粗体字体</b>通过标签定义</p> & ...

  9. 运维利器-ClusterShell集群管理操作记录

    在运维实战中,如果有若干台数据库服务器,想对这些服务器进行同等动作,比如查看它们当前的即时负载情况,查看它们的主机名,分发文件等等,这个时候该怎么办?一个个登陆服务器去操作,太傻帽了!写个shell去 ...

  10. this.down和this.up用法

    down既可以加id也可以加xtype