一、在之前,我们已经学会了如何使用elasticsearch作为一个简单的NoSql风格的分布式文件存储器--我们可以将一个JSON文档扔给Elasticsearch.也可以根据ID检索他们。但Elasticsearch真正强大之处在于找出有意义的信息--从大数据到全面的信息。

使用结构化的JSON文档,Elasticsearch不止会存储文档也会索引文档内容来使之可以被搜索。

每个文档里的字段都会被索引并被查询。而且不仅如此,在简单查询时,Elasticsearch可以使用所有的索引,以非常快的速度返回结果。

A search can be :

在类似于gender或者age这样的字段上使用结构化查询,join_date这样的字段上使用排序,就像SQL的结构化查询一样。

全文检索,可以使用所有字段类匹配关键字,然后按照关联性排序返回结果。

很多搜索是开箱即用的:

映射Mapping    :数据在每个字段中的解释说明

分析Analysis     :全文是如何处理的可以被搜索的

领域特定语言查询(Query DSL) :Elasticsearch使用的灵活的,强大的查询语言、

二、空搜索

最基本的搜索API表单是空搜索,他没有指定任何的查询条件,只返回集群索引中的所有文档。

GET /_search

{
"hits" : {
"total" : 14,
"hits" : [
{
"_index": "us",
"_type": "tweet",
"_id": "7",
"_score": 1,
"_source": {
"date": "2014-09-17",
"name": "John Smith",
"tweet": "The Query DSL is really powerful and flexible",
"user_id": 2
}
},
... 9 RESULTS REMOVED ...
],
"max_score" : 1
},
"took" : 4,
"_shards" : {
"failed" : 0,
"successful" : 10,
"total" : 10
},
"timed_out" : false
}

hits:

响应中最重要的部分是hits,他包含了total字段来表示匹配到的文档总数,hits数组还包含了匹配到的前10条数据。

hits数组中的每个结构都包含_index _type  _id,被加入到_source字段中意味着在搜索结果中我们可以直接使用全部文档,这不像其他搜索引擎只返回文档ID需要单独去获取文档。

每个节点都有一个_source字段,这是相关性得分,他衡量了文档与查询的匹配程度,默认的返回的结果中关联性最大的文档排在首位。

took:

took告诉我们整个搜索请求af花费的毫秒数

shards:

_shards节点告诉我们参与查询的分骗术有多少是成功的,有多少是失败的。

timeout:

查询超时与否

GET /_search?timeout=10ms

二、多索引和多类别

通过限制搜索的不同索引和类型,我们可以在集群中跨所有的文档搜索,Elasticsearch转发搜索请求到集群中平行的主分片或每个分片的复制分片上。

/_search    在所有索引的所有类型中搜索

/gb/_search   在索引gb的所有类型中搜索

/gb,us/_search  :在索引gb和us的所有类型中搜索

/g*,u*/_search :在以g和u开头的索引的所有类型中搜索

/gb/user/_search :在索引gb的类型user中搜索

/gb,us/user,tweet/_search :在索引gb和us的类型为user和tweet中搜索

/_all/user,tweet/_Search :在所有索引的user和tweet中搜索 search types user and tweet in all indices

三、分页

和SQL使用LIMIT关键字返回只有一页的结果一样,Elasticsearch接受from和size参数:

size:结果数默认10

from:跳过开始的结果数默认0

每页显示5个结果,页码从1到3

GET /_search?size=5

GET /_search?size=5&from=5

GET /_search?size=5&from=10

四、查询字符串

search API有两种表单,一种是简易版查询字符串将所有参数通过查询字符串定义,另一种版本是使用JSON完整的表示请求体。

查询所有类型为tweet并在tweet字段中包含elasticsearch字符的文档

GET /_all/tweet/_search?q=tweet:elasticsearch

查询name字段中包含John和tweet中包含mary的结果

+name:john +tweet:mary

ElasticSearch入门系列(七)搜索的更多相关文章

  1. ElasticSearch入门 第七篇:分词

    这是ElasticSearch 2.4 版本系列的第七篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  2. ElasticSearch实战系列七: Logstash实战使用-图文讲解

    前言 在上一篇中我们介绍了Logstash快速入门,本文主要介绍的是ELK日志系统中的Logstash的实战使用.实战使用我打算从以下的几个场景来进行讲解. 时区问题解决方案 在我们使用logstas ...

  3. ElasticSearch入门系列(三)文档,索引,搜索和聚合

    一.文档 在实际使用中的对象往往拥有复杂的数据结构 Elasticsearch是面向文档的,这意味着他可以存储整个对象或文档,然而他不仅仅是存储,还会索引每个文档的内容使之可以被搜索,在Elastic ...

  4. ElasticSearch入门系列(五)数据

    序言:无论程序如何写,最终都是为了组织数据为我们服务.在实际应用中,并不是所有相同类型的实体的看起来都是一样的.传统上我们使用行和列将数据存储在关系型数据库中相当于使用电子表格,这种固定的存储方式导致 ...

  5. ElasticSearch入门系列(四)分布式初探

    序言:ElasticSearch致力于隐藏分布式系统的复杂性,以下的操作都是在底层自动完成的: 将你的文档分区到不同的容器或者分片(shards),他们可以存在于一个或多个节点中 将分片均匀的分配到各 ...

  6. ElasticSearch入门系列(一)是什么以及安装和运行

    一.是什么 ElasticSearch是一个基于Apache Lucene的开源搜索引擎. Elasticsearch: 分布式的实时文件存储,每个字段都被所用并可被搜索 分布式的实时分析搜索引擎 可 ...

  7. ElasticSearch优化系列七:优化建议

    尽量运行在Sun/Oracle JDK1.7以上环境中,低版本的jdk容易出现莫名的bug,ES性能体现在在分布式计算中,一个节点是不足以测试出其性能,一个生产系统至少在三个节点以上. ES集群节点规 ...

  8. Elasticsearch学习系列七(Es分布式集群)

    核心概念 集群(Cluster) 一个Es集群由多个节点(Node)组成,每个集群都有一个共同的集群名称作为标识 节点(Node) 一个Es实例就是一个Node.Es的配置文件中可以通过node.ma ...

  9. ElasticSearch入门系列(六)分布式操作

    一.路由文档到分片 当你索引一个文档的时候,他被存储在单独一个主分片上.Elasticsearch根据一个算法来找到所在分片上. shard=hash(routing)%number_of_prima ...

随机推荐

  1. C 运算符优先级

    优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右   () 圆括号 (表达式)/函数名(形参表)   . 成员选择(对象) 对象.成员名   -& ...

  2. 报表引擎API开发入门— EJB程序数据源

    我们前面讲了几个数据源,今天我们来讲一下EJB数据源,这篇讲完我们数据源这部分就讲完了.数据连接不需要直接访问数据库,而是使用EJB做为数据源.FR通过定义程序数据集使用EJB的相关类获取到EJB数据 ...

  3. 【Unity3d】Ray射线初探-射线的原理及用法

    http://www.xiaobao1993.com/231.html 射线是一个无穷的线,开始于origin并沿着direction方向. 当射线碰到物体后.它就会停止发射. 在屏幕中拉一个CUBE ...

  4. [No000032]程序员的年龄天花板

    程序员职业生涯中流行这这样一个定律:35岁定律,那35岁以上的老程序员都干吗去了呢?为了讨论程序员的职业寿命,我们先得给公司或者团队分分类.大概有这么三类: 外包型 项目型 产品型 咱们一一来说一下吧 ...

  5. java 27 - 8 反射之 通过反射来设置某个对象的某个属性为指定值

    标题的意思是: 通过反射写一个类,类中有个方法.该方法可以设置某个类中的某个属性(构造方法,成员变量,成员方法)为特定的值 代码: // 该方法的参数列表是一个类的 类名.成员变量.给变量的赋值 pu ...

  6. Eclipse 搜索插件 instasearch

    http://marketplace.eclipse.org/content/instasearch

  7. bzoj3223 文艺平衡树 (treap or splay分裂+合并)

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3313  Solved: 1883 [Submit][S ...

  8. hdu 4027

    Can you answer these queries? Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65768/65768 K ...

  9. Nginx+keepalived双机热备(主从模式)

    负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行.关于负载均衡介绍,可以参考:linux负载 ...

  10. PHP-数组函数

    今天在写一个给第三方同步数据的接口时遇到一个这种情况,我有一大坨数据,但是第三方只需要其中的几个而已,不及思索的就开始foreach $ret = array(); foreach ($needPar ...