【ES】Elasticsearch使用记录一

目标:与JAVA系统集成,掌握基本的ES JAVA API 使用

一、什么是搜索引擎,能解决什么问题

搜索的场景: 相关性、贴近用户选择筛选精准自动提示错字识别,且速度要快 

例:电商---「京东筛选电脑事例」

        百度搜索,关键字关键词匹配权重排序广告排名

        在github 上搜索代码

二、ES为什么能胜任搜索引擎工作

1、底层使用Lucene引擎实现,默认情况下会将所有数据进行索引

Lucene倒排索引有助于速度的提升

倒排索引示例:「存储搜索文章索引数据」

【ES】Elasticsearch使用记录一_第1张图片

上图中的意思是:左侧为原始数据,右侧是倒排索引数据,倒排索引中提取关键字标签,然后记录了含有该关键字的标号,那么比如说搜索peace关键字,可以立即找寻到2,3,4的博客,不再关注1。

2、相关性描述:算法评分相关性倒序

TF-IDF算法(词频-逆文档频率)

        词频:关键字在查询内容中出现的频率

        逆文档频率:如果某个单词在所有文档中比较少见,在某篇中权重高,则该词权重越高,得分越高

3、超越精确匹配

1> 处理错误拼写 2> 支持变化「近义词,相关性」3> 聚集统计数据「全内容统计相关性,提取归类,缩小用户选择范围」

4> 建议器「自动补全自动提示」

三、典型使用场景

主要后端系统,支持存储、搜索、统计,多机进行复制备份

【ES】Elasticsearch使用记录一_第2张图片

添加到现有系统中提供搜索相关支持

【ES】Elasticsearch使用记录一_第3张图片

与现有工具协同使用

四、ES都有哪些功能

存储

搜索:查询和过滤器的使用「RESTFul API的暴露使用」

高级功能:缓存到实时性分析进行聚集分析、获取最流行标签、一组帖子平均流行度任意组合,获取每类标签中帖子平均流行度灵活的文档组织方式、多个索引单独搜索或同时搜索

五、ES与传统数据库

传统数据库 :行/很多列、分布在不同的数据表中,需要进行关联查询

Elasticsearch :文档键值对方式   优势:灵活性大;文档是具有层次结构的,可以将属于一个逻辑实体数据保持在同一个文档中

六、Solr 与 ES

【ES】Elasticsearch使用记录一_第4张图片

七、安装

我这里使用了Docker的安装方式进行安装。

【ES】Elasticsearch使用记录一_第5张图片

通过搜索我使用了第一个带有Kibana工具集成的stars最多的镜像

在构建容器时,需要注意端口的映射,至少要映射 9200(ES默认端口), 5601(Kibana默认端口),9300。

进入容器查看基础目录

【ES】Elasticsearch使用记录一_第6张图片

bin:启动文件

config:配置文件 

log4j2 

jvm.options [jvm虚拟机硬件配置等]

 elasticsearch.yml [集群、端口、目录、ip等] 

lib [相关jar包] 

logs [日志] 

modules [功能模块] 

plugins [插件(重要)比如 IK分词器]

八、与传统数据库概念做比较

【ES】Elasticsearch使用记录一_第7张图片

索引:非常大的文档集合,相当于数据库中的库。建立完索引后会存储在分片上

类型:类似传统数据库中定义字段类型,ES在不定义的情况下,可以自动识别,当然提前定义好,最安全的方式。 7.X过时;8.X废弃

文档:     es是面向文档的

 一篇文档同时包含字段和对应的值,也就是key:value

 包含层次结构,一个文档中包含自文档,就是JSON

 灵活处理结构,不需要像数据库需提前定义好所有字段

九、使用

从bin中启动后访问【ES】Elasticsearch使用记录一_第8张图片 当返回该页面后ES说明启动成功

安装可视化界面工具 ES-head

ES-head 官方Docker镜像版本后续没有更新了,故我在普通镜像中使用git clone方式来进行构建

然后我将镜像提交到了 Docker Hub中

需要进入目录内运行 npm run start 

构建镜像时候需要注意映射9100端口 成功以下图

【ES】Elasticsearch使用记录一_第9张图片

十、ELK

Elaticsearch:基于Lucene、分布式、通过ResuFul方式进行交互的近乎实时搜索平台框架

Logstash:中央数据流引擎,从不同目标收集不同格式数据,然后过滤后输出到不同目的地「MQ/文件/redis/elasticsearch/kafka」

Kibana:可将ES的数据通过友好的页面展示出来,提供实时分析的功能

【ES】Elasticsearch使用记录一_第10张图片

基本流程 : 收集清洗数据-->搜索,存储-->Kibana

十一、IK分词器插件分词

算法:

ik_smart (最少切分)【ES】Elasticsearch使用记录一_第11张图片

ik_max_word (最细粒度划分)

【ES】Elasticsearch使用记录一_第12张图片

自定义中文搜索字典:

【ES】Elasticsearch使用记录一_第13张图片

插件配置所在位置:

【ES】Elasticsearch使用记录一_第14张图片

配置自己的my.dic 例:我这里配置一个"阿里巴"的名词

【ES】Elasticsearch使用记录一_第15张图片

十一、REST风格

【ES】Elasticsearch使用记录一_第16张图片

索引-创建索引规则

【ES】Elasticsearch使用记录一_第17张图片

增删改查示例:

【ES】Elasticsearch使用记录一_第18张图片

文档:

【ES】Elasticsearch使用记录一_第19张图片

若不指定索引规则,ES默认会根据文档生成索引规则

【ES】Elasticsearch使用记录一_第20张图片

查询:

1、

【ES】Elasticsearch使用记录一_第21张图片

2、复杂查询

空格进行多关键字搜索

【ES】Elasticsearch使用记录一_第22张图片

bool - (must 、should)

must (and)

【ES】Elasticsearch使用记录一_第23张图片

should (or)

【ES】Elasticsearch使用记录一_第24张图片

must not ( != )

【ES】Elasticsearch使用记录一_第25张图片

filter (某字段范围)

【ES】Elasticsearch使用记录一_第26张图片

sort (排序 asc desc)

【ES】Elasticsearch使用记录一_第27张图片

类型keyword和text 关键字与文本 -- 关键字类型不支持分词查询的

【ES】Elasticsearch使用记录一_第28张图片

term与match 精确与分词

term 精确查询 不使用分词器 将词识别一个词

【ES】Elasticsearch使用记录一_第29张图片

match 使用分词器查询

【ES】Elasticsearch使用记录一_第30张图片

_source 过滤字段--筛选显示的标签字段

【ES】Elasticsearch使用记录一_第31张图片

from size 分页

hightlight 高亮

【ES】Elasticsearch使用记录一_第32张图片

自定义高亮

【ES】Elasticsearch使用记录一_第33张图片

你可能感兴趣的:(ES)