ES是一个分布式可扩展的实时搜索和分析引擎。
使用场景:全文搜索,结构化数据,统计,查询定位,地理定位,自动完成,查找提示等
入门
ES基于lecene
lecene是个框架,需要使用java,并在程序中集成lucene
ES用java编写,在lecene基础上,使用restful API,无需了解lucene原理
而且是ES是分布式
ES从lucene上的抽象层发展起来
安装
先安装java
安装ES
安装sense
与ES通信
java api,ES内置
通过http向restful api传送json,curl
启程
ES是面向文档型数据库,而不是传统关系数据库
ES的数据格式是JSON
类比关系数据:
数据库-》表-》行-》列
索引-》类型-》文档-》字段
索引作为名称,类似关系型DB中数据库,做动词类似insert命令,关系型DB中的索引在ES中对应的是反向索引
基本搜索
存储文档:put /a/b/1 a为索引,b为类型,1是id
获取文档:get /a/b/1
delete删除,head查询是否存在,替换还是put
全体检索 get /a/b/_search
带关键字检索 get /a/b/_search?q=xx
DSL(领域特定语言)搜索,搜索条件为json串
带过滤的搜索,json中有filtered,下层为filter和match
全文搜索:_score代表相关性评分
短语整体匹配:match_phrase
高亮搜索:highlight,返回结果用<em></em>包住
汇总统计:aggs,类似sql中group by
搜索
空白搜索
不加搜索条件即可,默认只返回前10个结果
hits:匹配的文档。total代表匹配的数量,子hits中包括了index,type,id和具体结果
_score是相关性,没加查询条件就是1.max_score就是_score中最大值
took代表请求耗费的时间,单位毫秒
shards是参与查询的分片数,及成功和失败的个数
time_out告诉我们是否查询超时。我们可以在查询中设置这个参数。timeout不是终止查询,而是返回指定时间内已经查到的数据
多索引多类型
在/_search前添加路径,可以指定索引和类型
比如/gb,us/user,tweet/_search就是搜索索引gb和us中类型us及类型tweet的所有文档
size参数是每次返回的结果数,from是起始的结果编号
页码过大会有问题。因为请求最大100条,是每个节点都请求100条,然后再整体处理。
搜索api分两种,一种是精简版的,一种json的完整版
?q=a:b 查询所有字段a值为b的文档 +c:d 增加条件 -e:f 绝对不匹配条件
_all全匹配,在路径中可以使用
举例:字段name包括mary或john,date>2014-9-10,_all字段包含aggregations或geo
+name:(mary john) +date:>2014-09-10 +(aggregations geo)
网友评论