02_ElasticSearch 倒排索引

简介: 02_ElasticSearch 倒排索引

全文检索底层采用的是倒排索引

为什么倒排索引比数据库的B-Tree查询效率要高?

ES引擎把文档数据写入到倒排索引(Inverted Index)的数据结构中,倒排索引建立的是分词(Term)和文档(Document)之间的映射关系,在倒排索引中,数据是面向词(Term)而不是面向文档的。

一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表

序号

文档内容

1

小明是一家科技公司的创始人,开的汽车是奥迪a6,体验很好

2

小宇是一家科技公司的前台,开的汽车是保时捷911

3

小亮买了小宇的保时捷,体验很好

4

小洁是一家科技公司的开发主管,开的汽车是奥迪,体验很好

5

小娜是一家科技公司的开发,开的汽车是雪弗莱,体验一般

倒排索引会对 对象文档内容进行关键字分词,可以使用关键字词直接定位到文档内容。

单词ID

单词

倒排列表 docId

1

小

1,2,3,4,5

2

一家

1,2,4,5

3

开发

4,5

4

汽车

1,2,4,5

5

奥迪

1,4

6

体验很好

1,3,4

7

保时捷

2,3

8

保时捷911

2

雪弗莱

5

在Kibana中添加若干条数据

POST /chixing/user/6
{
  "name":"xiaoyu",
  "age":21,
  "gender":"M",
  "car":"奥迪"
}
POST /chixing/user/7
{
  "name":"xiaona",
  "age":22,
  "gender":"F",
  "car":"保时捷"
}
POST /chixing/user/8
{
  "name":"xiaoming",
  "age":21,
  "gender":"M",
  "car":"雪弗莱"
}
POST /chixing/user/9
{
  "name":"xiaojie",
  "age":21,
  "gender":"M",
  "car":"宝马"
}
## insert data without special id,generate id automatically
##添加的数据没有主键,会自生成主键
POST /chixing/user/
{
  "name":"xiaofeng",
  "age":21,
  "gender":"M",
  "car":"宝马"
}

查询数据的语法

# get data by id
GET /chixing/user/9
GET /chixing/user/FyQ-P3EBhgCvuwOUebKs
# get all data 查询所有
GET /chixing/user/_search
# get some data by some assigned id , 根据一部分主键查询数据
GET /chixing/user/_mget
{
  "ids": ["7","8"]
}

复杂条件查询

#根据其他字段查询,如根据年龄查询
GET /chixing/user/_search?q=age:21
# 区间查询
GET /chixing/user/_search?q=age[22 TO 30]
# 查询年龄在20-30之间,并且按照年龄降序、从第0条数据到第1条数据
GET /chixing/user/_search?q=age[22 TO 30]&sort=age:desc&from=0&size=1
# 查询年龄在20-30之间,并且按照年龄降序、从第0条数据到第1条数据,展示name和age字段
GET /chixing/user/_search?q=age[22 TO 30]&sort=age:desc&from=0&size=1&_source=name,age

DSL语言查询与过滤

ES中查询请求有两种方式,一种格式简易版拆线呢,另一种是使用JSON完整的请求体,叫做结构化查询DSL
由于DSL查询更为直观简易,所以大都使用这种方式
DSL查询时POST过去一个json,由于POST的请求是json格式的,所以存在很多灵活性,也有很多形式。

根据名称精确查询姓名

## term 是精确查询  
GET chixing/user/_search
{
  "query": {
    "term": {       
        "name": "walter"      
    }
  }  
}
## match 支持分词查询
GET chixing/user/_search
{
  "query": {
    "match": {
        "car": "奥"      
    }
  }  
}
## match 是模糊 查询  
## limit 0,1 (分页查询 )
GET chixing/user/_search
{
  "from": 0,
  "size": 1, 
  "query": {
    "match": {
        "car": "奥"      
    }
  }  
}

term 与match的区别

term 查询不会对字段进行分词查询,会采用精确匹配
match会根据该字段的分词器,进行分词查询
相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
存储 算法 搜索推荐
Elasticsearch 的倒排索引
Elasticsearch 的倒排索引
397 2
|
存储 缓存 自然语言处理
【Elasticsearch专栏 05】深入探索:Elasticsearch在处理非结构化数据时,倒排索引有何优势
在处理非结构化数据时,倒排索引的优势在于其高效的查询性能,能够迅速匹配文本中的关键词,实现全文搜索。此外,倒排索引支持复杂的查询操作,可扩展性强,且通过压缩技术优化存储空间。这些特点使倒排索引成为处理非结构化数据的理想选择。
409 1
|
存储 自然语言处理 搜索推荐
【Elasticsearch专栏 01】深入探索:Elasticsearch的正向索引和倒排索引是什么?
正向索引根据文档ID直接查找文档内容,适用于精确匹配场景;而倒排索引则基于文档内容构建,通过关键词快速定位相关文档,适用于全文搜索,显著提高查询效率,是搜索引擎的核心技术。
473 2
|
自然语言处理 搜索推荐 索引
分布式系列教程(31) -ElasticSearch倒排索引
分布式系列教程(31) -ElasticSearch倒排索引
341 0
|
测试技术 API 开发工具
ElasticSearch核心概念:倒排索引
ElasticSearch核心概念:倒排索引
391 6
|
存储 自然语言处理 数据库
Elasticsearch倒排索引
【11月更文挑战第2天】
490 1
|
存储 缓存 自然语言处理
【Elasticsearch】Elasticsearch倒排索引详解
【Elasticsearch】Elasticsearch倒排索引详解
975 12
|
存储 自然语言处理 NoSQL
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之倒排索引(三)
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之倒排索引(三)
|
存储 自然语言处理 搜索推荐
【Elasticsearch专栏 06】深入探索:Elasticsearch如何处理倒排索引中的分词问题
Elasticsearch通过内置和可定制的分词器及过滤器处理倒排索引中的分词问题,确保文本被拆分成合适的词条并优化存储,为全文搜索等提供高效支持。用户可通过分析API测试和调整分词效果。
394 3
|
存储 自然语言处理 负载均衡
【Elasticsearch专栏 03】深入探索:Elasticsearch倒排索引是如何提高搜索效率的
倒排索引通过直接关联文档内容,将关键词映射到相关文档,减少扫描范围,并使用高效数据结构快速查找和匹配关键词,从而显著提高搜索效率。此外,它支持复杂查询操作和搜索结果优化,进一步提高搜索的准确性和用户满意度。
721 1

热门文章

最新文章