ToB企服应用市场:ToB评测及商务社交产业平台

标题: Elasticsearch简单介绍 [打印本页]

作者: 怀念夏天    时间: 2024-9-22 21:17
标题: Elasticsearch简单介绍
1 Elasticsearch简介

Elasticsearch 是一个分布式的、基于 RESTful API 的搜索和分析引擎,广泛用于大规模的数据存储和快速检索。它最初由 Shay Banon 于 2010 年开发,是开源的,而且是 Elastic Stack(通常称为 ELK Stack)的焦点组成部分,另外组成部分是 Logstash、Beats(用于数据收集和处置惩罚)和 Kibana(用于数据可视化)。

2 正向索引与倒排索引

2.1 正向索引

正向索引 是指为每个文档记载此中出现的所有词汇及其位置。其布局可以明白为:每个文档对应一份词汇表,存储该文档中出现的所有词以及它们的频率、位置等信息。
特点:
按文档举行索引,存储每个文档的具体信息。
优点是轻易获取某个文档中所有词汇的信息,适合于需要统计文档中词频、词位置等环境的操作。
缺点是对于查找某个词在哪些文档中出现效率较低,由于需要扫描所有文档。

2.2 倒排索引(Inverted Index)

倒排索引是搜索引擎中最常用的索引布局,用来快速查找包含某个词的所有文档。倒排索引创建了一张从词汇到文档的映射表,即对于每个词,记载它在哪些文档中出现,以及在这些文档中的位置。
特点:
按词汇举行索引,快速查找包含该词的所有文档。
优点是对搜索效率极高,尤其是当我们查询某个词或一组词时,可以或许快速定位所有相关文档。
缺点是需要额外的空间存储索引表。

3 msql和elasticsearch概念对比


总结
SQL 实用于需要强一致性和复杂关系查询的场景,好比财务系统、事务型数据库。
Elasticsearch 更适合大规模及时搜索、日记分析、全文检索等应用场景,具有高扩展性和近及时搜索能力。
这两者可以互补使用,SQL 处置惩罚布局化数据,ES 提供搜索和分析。
4 使用 Docker 安装 Elasticsearch + Kibana

docker安装elastic search和kibana
5 操作索引库

5.1 创建索引库

访问kibana,默认端口为5601。Dev Tools 提供了一个类似于控制台的界面,你可以在此中输入并实行 Elasticsearch 的 RESTful API 请求。可通过交互式的方式实行 Elasticsearch 查询、管理索引库和实行其他集群操作。


指定 mappings 和 settings 创建索引库
在创建索引库时指定 mappings(字段类型定义)和 settings(如分片和副本的设置)。
  1. PUT /my_index
  2. {
  3.   "settings": {
  4.     "number_of_shards": 3,  # 分片数
  5.     "number_of_replicas": 1  # 副本数
  6.   },
  7.   "mappings": {
  8.     "properties": {
  9.       "title": {
  10.         "type": "text"
  11.       },
  12.       "author": {
  13.         "type": "keyword"
  14.       },
  15.       "publish_date": {
  16.         "type": "date"
  17.       },
  18.       "price": {
  19.         "type": "float"
  20.       }
  21.     }
  22.   }
  23. }
复制代码
阐明
settings:

mappings:

5.2 查询、删除、修改索引库

1.查询索引库的配置信息
  1. GET /my_index
复制代码
这将返回 my_index 的配置信息,包括分片数、副本数、字段映射等。
2. 删除索引库
  1. DELETE /my_index
复制代码
这个请求会永久删除名为 my_index 的索引库以及此中的所有数据。操作不可逆,因此删除前请确保不再需要该数据。

3. 修改索引库
在 Elasticsearch 中,索引库的某些设置是可以在创建后修改的,但有些设置(如 number_of_shards)则不能更改。以下是一些常见的可修改操作:

6 文档操作

6.1 新增、查询、删除文档

1. 新增文档
新增文档的DSL语法如下

示例 1:使用 POST 新增文档
  1. POST /my_index/_doc/
  2. {
  3.   "title": "Elasticsearch Basics",
  4.   "author": "John Doe",
  5.   "publish_date": "2024-01-01",
  6.   "price": 19.99
  7. }
复制代码
索引库名:my_index 是索引库的名称。
类型:_doc 是文档类型,在 Elasticsearch 7.x 之后,推荐使用 _doc 作为默认值。
自动天生 ID:不指定文档 ID 时,Elasticsearch 会为该文档自动天生一个唯一的 ID。
示例 2:使用 PUT 新增或更新文档(指定 ID)
  1. PUT /my_index/_doc/1
  2. {
  3.   "title": "Elasticsearch Advanced",
  4.   "author": "Jane Smith",
  5.   "publish_date": "2024-02-01",
  6.   "price": 29.99
  7. }
复制代码
指定文档 ID:文档的 ID 被明确设置为 1。如果该 ID 已存在,则该操作会更新该文档。
2. 查询文档
使用 GET 请求来检索特定的文档或实行搜索查询。
示例 1:根据 ID 查询文档
  1. GET /my_index
  2. /_doc/1
复制代码
示例 2:搜索文档(基于条件)
  1. GET /my_index
  2. /_search{  "query": {    "match": {      "title": "Elasticsearch"    }  }}
复制代码
搜索:通过 match 查询,Elasticsearch 会在 title 字段中搜索包含 “Elasticsearch” 关键字的文档。
示例 3:获取所有文档
  1. GET /my_index
  2. /_search{  "query": {    "match_all": {}  }}
复制代码
匹配所有文档:match_all 查询会返回索引库中的所有文档。
3. 删除文档
使用 DELETE 请求删除指定的文档。
示例:根据 ID 删除文档
  1. DELETE /my_index
  2. /_doc/1
复制代码
这将删除 my_index 索引库中 ID 为 1 的文档。如果指定的文档不存在,Elasticsearch 会返回一个 404 错误。
4. 总结

6.2 修改文档

1.全量修改,删除旧文档,添加新文档

  1. PUT /my_index/_doc/1
  2. {
  3.   "title": "Updated Elasticsearch Basics",
  4.   "author": "John Doe",
  5.   "publish_date": "2024-01-01",
  6.   "price": 19.99
  7. }
复制代码
2.增量修改,修改指定字段值,使用 POST 和 _update API 举行部分更新。

示例:
  1. POST /my_index/_doc/1/_update
  2. {
  3.   "doc": {
  4.     "price": 24.99,
  5.     "title": "Elasticsearch Basics - Updated"
  6.   }
  7. }
复制代码
这里,doc 对象内的字段会被更新,而文档的其他字段保持不变。例如,price 和 title 字段会被更新为新的值,而其他字段(如 author、publish_date)将保持不变。
3. 通过脚本举行复杂的更新
示例:使用脚本增加字段值
  1. POST /my_index/_doc/1/_update
  2. {
  3.   "script": {
  4.     "source": "ctx._source.price += params.increment",
  5.     "lang": "painless",
  6.     "params": {
  7.       "increment": 5
  8.     }
  9.   }
  10. }
复制代码

7 分词器

分词器(Tokenizer)是文本处置惩罚中的一个关键组件,尤其在搜索引擎、文本分析、天然语言处置惩罚(NLP)等范畴中扮演告急角色。它的主要作用是将文本切分成若干个有意义的词或词组。分词器的使用可以资助举行词频统计、信息检索、文本分类等使命。
7.1 分词器的基本概念

分词器的作用:

常见的分词器类型:

7.2 Elasticsearch 分词器

Elasticsearch 是一个基于 Lucene 的分布式搜索引擎,它提供了多种分词器用于处置惩罚和分析文本数据。

7.3 IK分词器

IK 分词器是 Elasticsearch 中一个盛行的中文分词器,实用于处置惩罚中文文本。
1. 安装 IK 分词器插件
安装 IK 分词器插件
2. 创建索引时使用 IK 分词器
  1. PUT /my_index
  2. {
  3.   "settings": {
  4.     "analysis": {
  5.       "analyzer": {
  6.         "ik_max_word": {
  7.           "type": "ik_max_word"
  8.         },
  9.         "ik_smart": {
  10.           "type": "ik_smart"
  11.         }
  12.       }
  13.     }
  14.   },
  15.   "mappings": {
  16.     "properties": {
  17.       "content": {
  18.         "type": "text",
  19.         "analyzer": "ik_max_word"
  20.       }
  21.     }
  22.   }
  23. }
复制代码

3. 使用 IK 分词器举行文档索引和查询
在创建了索引并配置了 IK 分词器之后,你可以像往常一样索引和查询文档。
  1. POST /my_index/_doc/1{  "content": "Elasticsearch 是一个分布式搜索引擎"}示例:搜索文档json复制代码GET /my_index
  2. /_search{  "query": {    "match": {      "content": "分布式搜索"    }  }}
复制代码
4. 测试 IK 分词器
使用 _analyze API 来测试 IK 分词器对文本的分词效果。
  1. POST /my_index/_analyze
  2. {
  3.   "analyzer": "ik_max_word",
  4.   "text": "Elasticsearch 是一个分布式搜索引擎"
  5. }
复制代码

5. 扩展词库

6. 停用词库


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4