es的文本操作(doc)


在Elasticsearch中,索引的文本处理是指对文档中的文本数据进行存储、分析和查询的过程。为了实现高效的全文搜索,Elasticsearch对文本进行特别的处理和管理。

核心概念:

  1. 文档(Document)
    • Elasticsearch中的基本数据单元,每个文档相当于关系型数据库中的一行。文档由多个字段组成,字段可以是文本、数字、日期等不同类型。
  2. 索引(Index)
    • 索引是Elasticsearch中数据的逻辑容器,相当于关系型数据库中的表。每个索引包含许多文档,并且会被分成多个分片来存储。
  3. 字段类型(Field Type)
    • 文本字段(text):用于存储可以进行全文搜索的文本。Elasticsearch会对其进行分词(tokenization)和其他预处理。
    • 关键字字段(keyword):用于存储不进行全文搜索的字符串,如ID、标签、类别等。

文本处理的核心步骤:

  1. 分词(Tokenization)
    • 当文本数据被索引时,Elasticsearch会先将长文本字段(text类型)分解为多个词元(tokens)。例如,对于句子 "The quick brown fox" 会被分成 ["the", "quick", "brown", "fox"]
  2. 分析器(Analyzer)
    • 分词器不仅将文本拆解成词元,还会执行其他处理步骤,如将文本转化为小写、去除停用词(如 "the"、"and" 等)等。常用的分析器有 standard 分析器、whitespace 分析器等。
  3. 倒排索引(Inverted Index)
    • 分词后的词元会被存储在倒排索引中,倒排索引是一种数据结构,允许快速找到包含特定词元的文档。它是全文搜索引擎的核心组件。
Restful风格程序:
    RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。
    REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序。
    REST首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。
JSON语法:
	基础数据类型:
        字符串:
			"abcd"
			"IT教育"
			"2024"
			""
        数字:
        	0
        	1
        	2
        	...
        布尔值:
        	true
        	false
        空值:
        	null
	
	高级数据类型:
		数组:
			["123","沙河",2022,null,true,{"school":"oldboyedu","class":"linux"}]
	
		对象:
			{"name":"123", "age":40, "address":"北京沙河", "hobby":["Linux","思想课"],"other":null}


文档的管理

	- 文档的管理
		- POST http://10.0.0.101:9200/index_name/_doc[/document_id]
		- DELETE http://10.0.0.101:9200/index_name/_doc/document_id
		- POST http://10.0.0.101:9200/index_name/_doc/document_id/_update
		- GET http://10.0.0.101:9200/index_name/_doc/document_id
		- GET http://10.0.0.101:9200/index_name/_search
		
	- 文档的批量操作
		- POST http://10.0.0.101:9200/_bulk
		- POST http://10.0.0.101:9200/_mget

创建文档

创建文档(不指定文档id)
POST 10.0.0.101:9200/es001/_doc
{
    "name": "李振东",
    "hobby": ["aaa","bbb","xxx"]
}

image-20241005145537474

创建文档(指定文档id)
POST 10.0.0.101:9200/es001/_doc/1001
{
    "name": "李振东",
    "hobby": ["aaa","bbb","xxx"]
}

image-20241005145630233

image-20241005145714991


修改文档

全量修改
POST 10.0.0.101:9200/es001/_doc/1001
{
    "name": "李振东东",
    "hobby": ["aaa2","bbb2","xxx2"]
}

image-20241005150044853

image-20241005145958757

image-20241005150023997

局部修改
POST 10.0.0.101:9200/es001/_doc/_update
{
    "doc":{
        "hobby":["抽烟","喝酒","烫头"]
    }
}

image-20241005150405915

image-20241005150023997

image-20241005150427933


文档的查看

GET 10.0.0.101:9200/es001/_search

image-20241005150733548


文档的删除

DELTE 10.0.0.101:9200/es001/_doc/1001

image-20241005150904076



文档的批量操作

批量创建

POST 10.0.0.101:9200/_bulk
{ "create": { "_index": "es010"} }
{ "name": "aaa","hobby":["骑车","拍小电影"] }
{ "create": { "_index": "es010","_id": 1002} }
{ "name": "bbb","hobby":["妹子","吃面"] }
{ "create": { "_index": "es010","_id": 1001} }
{ "name": "ccc","hobby":["家庭主妇"] }
{ "create": { "_index": "es111"} }
{ "name": "ddd","hobby":["骑车","拍小电影"] }

image-20241005151621488

批量修改

POST 10.0.0.101:9200/_bulk
{ "update" : {"_id" : "1001", "_index" : "es010"} }
{ "doc" : {"name" : "AObama"} }
{ "update" : {"_id" : "1002", "_index" : "es010"} }
{ "doc" : {"name" : "zhangqiling"} }

image-20241005152021643

image-20241005152041778

查询指定文档(批量查询)

POST 10.0.0.101:9200/_mget
{
  "docs": [
    {
      "_index": "es010",
      "_id": "1001"
    },
    {
      "_index": "es010",
      "_id": "1002"
    }
  ]
} 

image-20241005152338209

批量删除文档

POST 10.0.0.101:9200/_bulk
{ "delete" : { "_index" : "es010", "_id" : "1001" } }
{ "delete" : { "_index" : "es010", "_id" : "1002" } }

image-20241005152553533