当前位置:   article > 正文

简单了解Elasticsearch搜索引擎_ealestricsearch

ealestricsearch

1.什么是Elasticsearch

​ elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。

1.1组件介绍

  • beats套件:从不同类型的文件/应用中获取资源
  • Logstash:从多个采集器或数据源转换/抽取数据
  • elasticsearch:存储,查询数据
  • kibana:可视化es数据

1.2核心概念介绍

1.索引(index)

elsaticsearch将它的数据存储在一个或多个索引中。相较于sql,索引就相当于Mysql中的表

1.2Mapping

mapping可以理解为数据库的表结构,有什么字段,字段是什么类型

es支持动态mapping,表结构可以动态改变,不用像Mysql手动建表,避免没有相关字段无法插入

1.3document(文档)

在 ES 中,一份文档相当于 MySQL 中的一行记录,数据以 JSON 格式保存。文档被更新时,版本号会被增加。

1.4type(类型)

这是比较老旧版本会用到的定义,在 ES5 的时代,它可以对 Index 做更精细地划分,那个时代的 Index 更像 MySQL 的实例,而 type 类似 MySQL 的 table。

ES 7.x 以后,将逐步移除type这个概念,现在的操作已经不再使用,默认_doc

1.5端口

9200:客户端(外部用户)调用的端口

9300:给ES内部集群通信的(外部调用不了)

1.3安装

一套技术建议版本一致,此处是7.17版本

Elasticsearch 7.17icon-default.png?t=N7T8https://www.elastic.co/guide/en/elasticsearch/reference/7.17/setup.htmlKibana 7.17icon-default.png?t=N7T8https://www.elastic.co/guide/en/kibana/7.17/install.html

1.3.1如何查看elsaticsearch安装是否成功?

1.3.1.1bin目录cmd

1.3.1.2访问localhost:9200

访问成功

1.3.2Kibana

前提!!! 必须在elsaticsearch启动成功后启动才有效!

启动:bin目录cmd

端口:5601

首次访问比较慢:http://localhost:5601/

2.倒排索引

正向索引:理解为根据书中的目录找到文章

倒排索引:理解为根据内容找到文章

---假如,现在有两篇文章

文章a : 你好,小黑子

文章b : 你好,我是,coder

---构建倒排索引表

内容id
你好文章a,文章b
小黑子文章a
我是文章b
coder文章b

---用户搜 “你好 coder”

es先切词:你好,coder

然后去倒排索引表找相关文章......

3.ES相关语法

ES的请求方式

GET查询
POST增\改\查
PUT增\改
DELETE

3.1新建索引

规则:索引名称必须是小写的,不能用下划线开头,不能包含逗号:product,website,blog

  • user_index:用于存储用户数据的索引。
  • product_index:用于存储产品数据的索引。

3.1.1动态新建索引

  • PUT 索引名
  •   {
  •       "内容" : " 内容"
  •   }

PUT请求创建了一个名为"my_index01"的索引,并设置了分片和副本的数量

  1. PUT my_index01
  2. {
  3. "settings": {
  4. "number_of_shards": 3,
  5. "number_of_replicas": 2
  6. }
  7. }

POST请求向该索引中插入了两个文档,分别对应ID为1和2的数据

  1. POST my_index01/_doc/1
  2. {
  3. "name": "John Doe",
  4. "age": 30,
  5. "email": "johndoe@example.com"
  6. }
  7. POST my_index01/_doc/2
  8. {
  9. "name": "Jane Doe",
  10. "age": 25,
  11. "email": "janedoe@example.com"
  12. }

3.1.2静态新建索引

  • PUT 索引名
PUT blog_post_index

3.2查看索引结构

  • GET 索引名称/_mapping
GET my_index01/_mapping

3.3查询索引内数据

  • GET 索引名/_search

3.4删除索引

delete sc_001     删除索引

3.5管理文档-数据

  1. ​PUT /索引名称/类型名称/文档ID(POST可以不指定)
  2. {
  3. "字段的名称":"字段值xxx"
  4. ...
  5. }
  6. # 我们新增2条数据分别使用POST和GET 如果没有user的话会自动的创建
  7. POST sc_001/user
  8. {
  9. "id":1,
  10. "name":"zhangsan",
  11. "age":40
  12. }
  13. PUT sc_001/user/1
  14. {
  15. "id":1,
  16. "name":"LISI",
  17. "age":31
  18. }

3.6索引数据的查询

3.6.1查询索引内的全部数据

GET 索引名/_search 

3.6.2查询索引内的某一条数据

根据id:GET 索引名/_doc/id值

3.7索引数据的修改

  • POST  索引名/_doc/id值
  • {
  •     修改的内容
  • }

my_index01/_doc/1 索引中的数据如下 --->

修改索引中的一条数据

查询修改后数据如下--->GET my_index01/_doc/1

3.8索引数据的新增

  • POST : 新增索引数据可以不指定id,系统创建成功会手动生成id
  • PUT:新增索引数据必须指定id
3.8.1post指令

结果

3.8.2put指令

error---> PUT指令新增索引文件的数据,必须指定id,否则报错

4.Elasticsearch SQL入门使用

查询的指令格式

  • POST /_sql?format=txt
  • {
  •   "query": "...sql查询语句...'"
  • }
  1. POST /_sql?format=txt
  2. {
  3. "query": "SELECT * FROM library WHERE release_date < '2000-01-01'"
  4. }

5.Elasticsearch的分词规则

5.1内置分词:......

这里简单示例一个 标准分词器

规则:英文空格分词,中文貌似单个词分词

  1. POST _analyze
  2. {
  3. "analyzer": "standard",
  4. "text": "Like X 国庆放假的"
  5. }

结果 like,x,国,庆,放,假,的

  1. {
  2. "tokens" : [
  3. {
  4. "token" : "like",
  5. "start_offset" : 0,
  6. "end_offset" : 4,
  7. "type" : "<ALPHANUM>",
  8. "position" : 0
  9. },
  10. {
  11. "token" : "x",
  12. "start_offset" : 5,
  13. "end_offset" : 6,
  14. "type" : "<ALPHANUM>",
  15. "position" : 1
  16. },
  17. {
  18. "token" : "国",
  19. "start_offset" : 7,
  20. "end_offset" : 8,
  21. "type" : "<IDEOGRAPHIC>",
  22. "position" : 2
  23. },
  24. {
  25. "token" : "庆",
  26. "start_offset" : 8,
  27. "end_offset" : 9,
  28. "type" : "<IDEOGRAPHIC>",
  29. "position" : 3
  30. },
  31. {
  32. "token" : "放",
  33. "start_offset" : 9,
  34. "end_offset" : 10,
  35. "type" : "<IDEOGRAPHIC>",
  36. "position" : 4
  37. },
  38. {
  39. "token" : "假",
  40. "start_offset" : 10,
  41. "end_offset" : 11,
  42. "type" : "<IDEOGRAPHIC>",
  43. "position" : 5
  44. },
  45. {
  46. "token" : "的",
  47. "start_offset" : 11,
  48. "end_offset" : 12,
  49. "type" : "<IDEOGRAPHIC>",
  50. "position" : 6
  51. }
  52. ]
  53. }

5.2重点:IK分词器(es插件)

中文友好:github ik分词开源项目The IK Analysis plugin integrates Lucene IK analyzer into elasticsearch, support customized dictionary. - GitHub - medcl/elasticsearch-analysis-ik: The IK Analysis plugin integrates Lucene IK analyzer into elasticsearch, support customized dictionary.icon-default.png?t=N7T8https://github.com/medcl/elasticsearch-analysis-ik

此处使用版本(一致):

ik 7.17.7版本icon-default.png?t=N7T8https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.17.7

分词语法

分词type:ik_max_word        ik_smart 

  • POST _analyze
  • {
  •   "analyzer": "分词type",
  •   "text": "文本content"
  • }
     

5.2.1 ik_max_word

  1. POST _analyze
  2. {
  3. "analyzer": "ik_max_word",
  4. "text": "南京市长江大桥"
  5. }

结果:南京,南京市,市长,长江大桥,长江,大桥

  1. {
  2. "tokens" : [
  3. {
  4. "token" : "南京市",
  5. "start_offset" : 0,
  6. "end_offset" : 3,
  7. "type" : "CN_WORD",
  8. "position" : 0
  9. },
  10. {
  11. "token" : "南京",
  12. "start_offset" : 0,
  13. "end_offset" : 2,
  14. "type" : "CN_WORD",
  15. "position" : 1
  16. },
  17. {
  18. "token" : "市长",
  19. "start_offset" : 2,
  20. "end_offset" : 4,
  21. "type" : "CN_WORD",
  22. "position" : 2
  23. },
  24. {
  25. "token" : "长江大桥",
  26. "start_offset" : 3,
  27. "end_offset" : 7,
  28. "type" : "CN_WORD",
  29. "position" : 3
  30. },
  31. {
  32. "token" : "长江",
  33. "start_offset" : 3,
  34. "end_offset" : 5,
  35. "type" : "CN_WORD",
  36. "position" : 4
  37. },
  38. {
  39. "token" : "大桥",
  40. "start_offset" : 5,
  41. "end_offset" : 7,
  42. "type" : "CN_WORD",
  43. "position" : 5
  44. }
  45. ]
  46. }

5.2.2 ik_smart 

  1. POST _analyze
  2. {
  3. "analyzer": "ik_smart",
  4. "text": "南京市长江大桥"
  5. }

结果:南京市,长江大桥

  1. {
  2. "tokens" : [
  3. {
  4. "token" : "南京市",
  5. "start_offset" : 0,
  6. "end_offset" : 3,
  7. "type" : "CN_WORD",
  8. "position" : 0
  9. },
  10. {
  11. "token" : "长江大桥",
  12. "start_offset" : 3,
  13. "end_offset" : 7,
  14. "type" : "CN_WORD",
  15. "position" : 1
  16. }
  17. ]
  18. }

5.3IK打分机制 

比如有三条内容:

①你是帅哥

②你不是大美女

③我是美女

用户搜索“美女”,第③分数最高,因为匹配关键词且匹配比例更大

用户搜“你是美女”,分词:你,是,美女,匹配度:③>②>①

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/842253
推荐阅读
相关标签
  

闽ICP备14008679号