`
m635674608
  • 浏览: 5053207 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

elasticsearch-查询基础篇

 
阅读更多

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

分享到:
评论

相关推荐

    ES同义词插件 elasticsearch-analysis-dynamic-synonym-6.5.1.rar

    本篇文章将重点讲解“ES同义词插件”——elasticsearch-analysis-dynamic-synonym-6.5.1,这是针对Elasticsearch 6.x版本的一个定制化插件,用于实现同义词处理功能。 标题中的"ES同义词插件 elasticsearch-...

    elasticsearch-analysis-ik-6.5.0.zip

    《Elasticsearch Analysis IK插件6.5.0版本详解》 Elasticsearch Analysis IK插件,全称为“elasticsearch-analysis-ik”,是为Elasticsearch量身定制的一款强大中文分词器。此插件源自社区,经过长时间的发展和...

    elasticsearch-analysis-ik-6.8.6.zip

    在现代大数据处理和搜索引擎领域,Elasticsearch(ES)扮演着重要的角色。它是一款强大的开源全文检索和分析引擎,广泛应用于日志分析、实时监控、数据可视化等多个场景。而在中文处理方面,Elasticsearch的分词能力...

    Elasticsearch 分享 - 基础篇

    根据给定的信息,我们可以深入探讨Elasticsearch的基础概念及其应用场景,并进一步解析Elasticsearch的关键术语和技术要点。 ### 什么是Elasticsearch? Elasticsearch是一个基于Lucene构建的开源搜索引擎,它提供...

    elasticsearch-analysis-ik-6.5.2.zip

    本篇文章将聚焦于Elasticsearch中的一个重要插件——"elasticsearch-analysis-ik",探讨其在6.5.2版本中的特性与应用。 首先,"elasticsearch-analysis-ik"是为Elasticsearch定制的中文分词插件,旨在提供更智能、...

    Elasticsearch顶尖高手系列课程-核心知识篇资料

    这个顶尖高手系列课程的核心知识篇涵盖了Elasticsearch的基础到高级技术,旨在帮助学习者深入理解和熟练掌握Elasticsearch的各项功能。 首先,Elasticsearch的基本概念是理解其运作机制的关键。它基于Lucene库,以...

    elasticsearch-6.2.4.zip

    本篇文章将深入探讨Elasticsearch 6.2.4的关键知识点。 首先,Elasticsearch的分布式特性是其一大亮点。它设计为一个分布式的实时文档存储,数据被分片存储在不同的节点上,增强了系统的容错性和可扩展性。每个节点...

    elasticsearch-analysis-ik-7.17.5.zip

    本篇将深入探讨elasticsearch-analysis-ik v7.17.5及其在Elasticsearch中的应用。 1. **elasticsearch-analysis-ik 插件介绍** `elasticsearch-analysis-ik` 是由社区开发的Elasticsearch中文分析器,旨在解决...

    分布式搜索引擎Elasticsearch开发实战基础篇 (ElasticSearch、ELK、搜索引擎、Lucene).rar

    分享一套完整版视频课程——分布式搜索引擎Elasticsearch开发实战基础篇 (ElasticSearch、ELK、搜索引擎、Lucene),本教程旨在带领大家进入搜索引擎领域,从无到有,深入浅出的讲解了什么是搜索引擎,搜索引擎的...

    elasticsearch-analysis-ik-5.2.0.zip

    本篇文章将深入探讨Elasticsearch中的IK分词搜索算法源码,通过分析elasticsearch-analysis-ik-5.2.0.zip压缩包内的组件,揭示其工作原理和实现机制。 首先,elasticsearch-analysis-ik-5.2.0.jar是IK分词插件的...

    【中华石杉】Elasticsearch顶尖高手系列-核心知识篇 + 高手进阶篇

    1. **Elasticsearch基础**:包括Elasticsearch的基本概念、安装与配置,以及如何进行索引管理。了解数据模型、文档操作(如增删改查)以及如何设置映射(Mapping)以优化搜索性能。 2. **集群和节点**:学习如何...

    Elasticsearch顶尖高手系列课程-核心知识篇+高手进阶篇(免费无加密)

    通过上述知识点的学习,不仅可以掌握Elasticsearch的基础用法,还能深入了解其高级特性,对于想要成为Elasticsearch高手的学习者来说是非常宝贵的学习资源。希望这套课程能够帮助大家更好地理解和应用Elasticsearch...

    ElasticSearch使用说明书 - 整合篇

    Elasticsearch 使用说明书整合篇详细解析 Elasticsearch(ES)是一种分布式、RESTful风格的搜索和数据分析引擎,常用于大数据分析和实时搜索场景。它不依赖传统的SQL数据库语句,而是采用JSON文档格式和HTTP协议...

    【中华石杉】Elasticsearch顶尖高手系列-高手进阶篇all

    根据提供的文件信息,标题与描述均为“【中华石杉】Elasticsearch顶尖高手系列-高手进阶篇all”,这表明该文件旨在为那些已经具备一定Elasticsearch基础并希望进一步提升技能的用户提供深入的技术指导。虽然提供的...

    Java语言程序设计-基础篇+进阶篇+英文原著-原书第10版(含课后习题答案和书中代码示例)

    Java语言程序设计-基础篇+进阶篇-原书第10版(含课后习题答案和书中代码示例) 这一 版从表述 、组织、示例、练习题以及附录方面都进行了极大的增强,包括: • 用JavaFX取代了Swing。JavaFX是一个用于开发JaVaGUI...

    【54】2018年最新价值799元Elasticsearch顶尖高手系列:高手进阶篇视频教程 .txt

    这些知识点主要围绕着Elasticsearch的高级应用和技术深入展开,旨在帮助那些已经具备一定基础的用户进一步提升其技能水平。 ### Elasticsearch简介 Elasticsearch是一个基于Lucene的开源搜索和分析引擎,它能够...

    elasticsearch相关.zip

    **Elasticsearch 6.2.3:在Linux下的安装...总之,安装Elasticsearch 6.2.3在Linux上是一项基础任务,但正确配置和管理它需要对系统环境、网络和安全策略有深入理解。希望这篇指南能帮助你顺利开始Elasticsearch之旅。

    53.(leaflet篇)leaflet线周边空间查询(ElasticSearch技术实现).zip

    标题中的“53.(leaflet篇)leaflet线周边空间查询(ElasticSearch技术实现)”表明这个压缩包的内容是关于使用Leaflet库进行地图展示,并结合Elasticsearch进行线状地理要素的周边空间查询的教程。Leaflet是一个轻...

    分布式搜索 elasticsearch 方案研究 - 基础知识

    本篇将深入探讨Elasticsearch的基础知识,涵盖其核心概念、环境搭建、配置管理以及高级特性。 **一、Elasticsearch核心概念** 1. **文档(Document)**:Elasticsearch处理的基本单元,可以看作是JSON格式的数据对象...

Global site tag (gtag.js) - Google Analytics