elasticsearch的核心概念:
Near Realtime(NRT):近实时性,从写入数据到可以被搜索到会有一个小小的延迟
Cluster:集群,包含多个节点,每个节点属于哪个集群是通过配置节点的所属集群名称,默认是elasticsearch
Node:节点,每个节点也有一个名称,默认系统分配的,默认也会加入一个名为elasticsearch的集群中。
Document&field:文档,是es中的最小数据单元,一个document可以是一条数据,用json数据结构表示,一个index的type下有多个document,每个document下由多个字段field组成。
Index:索引
Type:类型,一个索引下还可以分为多个类型,类型下就是document。
shard:每个索引会被分片,部署在不同的机器当中。
replica:分片后的shard为primary shard,对其进行复制一份为replica shard,提高的可用性和吞吐量。
基本操作:
status有三种状态:
green:每个索引的primary shard和replica shard都是active状态的
yellow:每个索引的primary shard都是active状态的,但是部分replica shard不是active状态
red: 不是所有索引的primary shard都是active状态的
查看集群中有哪些索引;
创建索引;
删除索引;
document的crud:
新增:
查询:
更新:更新的时候有两种方式,一种是进行替换,另一种是进行局部修改(底层也是替换)
document是 被替换了,,不是created。进行替换要编辑全部的document属性。
局部修改:
删除:
.
多种搜素方式;
1. query string search:
查询所有:
took:耗费了几毫秒
timed_out:是否超时
_shards:数据拆成了5个分片,所以对于搜索请求,会打到所有的primary shard(或者是它的某个replica shard也可以)
hits.total:查询结果的数量,2个document
hits.max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高
hits.hits:包含了匹配搜索的document的详细数据
query string search的由来,因为search参数都是以http请求的query string来附带的
搜索商品名称中包含yagao的商品,而且按照售价降序排序:GET /index/type/_search?q=name:aaa
适用于临时的在命令行使用一些工具,比如curl,快速的发出请求,来检索想要的信息;但是如果查询请求很复杂,是很难去构建的
在生产环境中,几乎很少使用query string search
2. query DSL (Domain Specified Language)
查询所有:
降序查找:
分页:
只查出指定字段:
3、query filter
按照范围查找:
4、full-text search(全文检索)
这里这个 name 字段会被拆解,建立倒排索引,然后进行匹配查询
5、phrase search(短语搜索)
跟全文检索相对应,相反,全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回
phrase search,要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配,才能作为结果返回
6、highlight search(高亮搜索结果)
聚合操作:
分组:
先对分组的字段进行设置。将fielddata属性设置为 true
然后再进行分组搜索:
分组之后取平均值.排序