一.概念:
ES是一个分布式的全文搜索引擎;使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API来隐Lucene的复杂性,从而让全文搜索变得简单。
Lucene是apache下的一个开源的全文检索引擎工具包(一堆jar包)。
二.特点:
1.分布式的实时文件存储,底层有一秒的延迟设置
2.处理PB级结构化或非结构化数据
3.简单的 RESTful API通信方式,支持多客户端
注:1.Lucene只支持Java,ES支持多种语言
2.单体/小项目使用Lucene ,大项目,分布式项目使用ES
三.倒排索引:
1. 文档分词
2. 关键词排序
3. 建立索引
4. 查询处理
四.Kinbana
1.概念:
开源分析和可视化平台,用搜索、分析和可视化存储Elasticsearch索引中的数据。
2.配置:
解压并编辑config/kibana.yml,设置elasticsearch.url的值为已启动的ES
默认情况下,Kibana会链接本地的默认ES http://localhost:9200
,如果需要修改链接的ES服务器,通过修改安装目录下 config/kibana.yml,将配置项 #elasticsearch.url: "http://localhost:9200"
取消注释即可修改连接的ES服务器地址。
3.文档的CRUD
(1)添加
PUT 索引库/文档类型/文档id
{JSON格式,文档原始数}
(2)查询
GET 索引库/类型/文档ID
GET _search 查询所有
(3)删除
DELETE {index}/{type}/{id}
(4)修改
整体修改:文档修改过程:1.标记删除旧文档,2.添加新文档
与添加语法一致
局部修改:局部修改过程: 1.检索旧文档 , 2.修改文档 ,3.标记删除旧文档 , 4.添加新文档
POST {index}/{type}/{id}/_update
五.DSL查询与DSL过滤
1.概念:
DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。DSL有两部分组成:DSL查询和DSL过滤。
注:用于复杂查询
2.区别:
(1)需要模糊查询的使用DSL查询 ,需要精确查询的使用DSL过滤,在开发中组合使用(组合查询) ,关键字查询使用DSL查询,其他的都是用DSL过滤。
(2)过滤结果可以缓存并应用到后续请求。 查询语句同时匹配文档,计算相关性,所以更耗时,且不缓存。
3.关键字:
-
query : 查询,所有的查询条件在query里面
-
bool : 组合搜索bool可以组合多个查询条件为一个查询对象,这里包含了 DSL查询和DSL过滤的条件
-
must : 必须匹配 :与(must) 或(should) 非(must_not)
-
match:分词匹配查询,会对查询条件分词 , multi_match :多字段匹配
-
filter: 过滤条件
-
term:词元查询,不会对查询条件分词
-
from,size :分页
-
_source :查询结果中需要哪些列
-
sort:排序
-
range:范围 gt:> gte:>= lt:< lte:<=
-
prefix:前缀
-
wildcard:通配符
4.使用:
六.分词器
注:英文通过空格分词.中文分词器这里使用IK分词器;版本与ES一致
1.使用:
将解压后的内容放置于ES根目录/plugins/ik
2.关键字:
IK分词器指定:ik_smart ; ik_max_word , ik_max_word 相比 ik_smart 来说会将文本做最细粒度的拆分。
七.文档类型映射
1.概念:
ES的文档映射(mapping)机制用于进行字段类型确认,将每个字段匹配为一种确定的数据类型。
2.基本数据类型:
字符串 | text(分词,默认) ; | keyword(不分词) ; | |||
---|---|---|---|---|---|
数字 | long(默认) | integer | short | double | float |
日期 | date | ||||
逻辑 | boolean |
3.映射:
单类型映射:
解释:给aigou索引库中的是goods类型创建映射 ,id指定为long类型 , name指定为text类型(要分词),analyzer分词使用ik,查询分词器也使用ik
多类型映射:
解释:同时给user和dept创建文档映射