ElasticSearch
基于Lucene(基于java)的分布式开源搜索引擎。开箱即用,自带分布式协调管理功能,仅支持json文件格式,更注重核心功能,高级功能多由第三方插件提供:如图形化界面需要kibana支撑。实时查询更快(ES开发维护者较少,更新快,学习成本较高)。
基本环境要求
jdk1.8
安装
以windows版本为例,下载解压后即可使用。默认自成集群(一个也是集群)。
修改默认配置文件:安装目录下 config/elasticsearch.yml 中修改即可
#绑定访问主机、端口
network.host: 192.168.0.1
http.port: 9200
#在启动此节点时,传递用于执行发现的主机的初始列表, "[::1]"表示localhost
discovery.seed_hosts: ["host1", "host2",, "[::1]",...]
#解决客户端跨域问题
http.cors.enabled: true
http.cors.allow-origin: "*"
启动
安装目录bin下运行elasticsearch.bat 即可
访问
直接访问 ip:port(默认9200) 即可
可视化界面安装
这里用的是 elasticsearch-head-master,解压此包后在当前解压路径下开始安装:
执行安装:(c)nmp install
执行启动:npm run start
访问:ip:9100(默认)
查询工具
大数据常用插件:kibana,类似的还有postman等等
分词插件
以中文分词插件ik分词器为例:将插件解压到elasticsearch目录下plugins目中即可使用。
查询分词路径:ip:9200/_analyze
analyzer: 取值 ik_smart 时,表示最少切分;ik_max_word 时,表示最细切分。
当然,ik分词器切分出的结果中并不一定有我们自己想要的词时,需要我们将想要的词加入到分词器的字典中。
在分词器目录config中新建自己的 .dic文件,将需要添加的分词加入其中或者将分词加入已存在的其他 .dic文件中。如果是新建dic文件的话,需要将此dic文件加入分词配置文件 IKAnalyzer.cfg.xml 中:
倒排索引
相对于正向索引来说的。在正向索引中,需要扫描所有的文档,在每个文档中寻找关键字。
倒排索引相反,通过先分析每个文档,提取其中的关键字,并建立关键字与文档ID之间的对应关系,找到关键字后直接去找对应的文档,而不是扫描所有文档后才能确定有哪些文档。如:
我 | 文档1,文档2,文档3 |
在 | 文档1,文档3,文档4,文档5 |
太阳系 | 文档4 |
REST风格的操作方式
GET / POST / DELETE,ip:port / 索引库名称 / [类型名称] / [文档id] 增删改查
POST:ip:port / 索引库名称 / [类型名称] / [文档id] / _update 修改指定文档
POST|GET:ip:port / 索引库名称 / [类型名称] / _search 查询指定类型的所有文档数据
索引库数据类型
字符串:text、keyword;如果fields中的类型为keyword,则此字段不可拆分。
数值:byte、short、integer、long、float、half float、scaled float、double
日期:date
布尔:boolean
二进制:binary
不指定数据类型(会根据数据类型默认):
创建索引时指定字段数据类型:
查询操作
单条件查询:
query:查询条件
match:模糊查询(包含)
term:精确查询(不会分词,适合keyword、date等明确值的)
_source:指定返回哪些字段
sort:排序
from:起始第多少条
size:返回条数
highlight:高亮
多条件查询
bool:多条件
must | should | must_not:多条件之间的关系,对应 sql 中的 and | or | not
filter:字段值的过滤