02_ElasticSearch 倒排索引

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 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会根据该字段的分词器,进行分词查询
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
7月前
|
存储 算法 搜索推荐
Elasticsearch 的倒排索引
Elasticsearch 的倒排索引
60 2
|
7月前
|
存储 缓存 自然语言处理
【Elasticsearch专栏 05】深入探索:Elasticsearch在处理非结构化数据时,倒排索引有何优势
在处理非结构化数据时,倒排索引的优势在于其高效的查询性能,能够迅速匹配文本中的关键词,实现全文搜索。此外,倒排索引支持复杂的查询操作,可扩展性强,且通过压缩技术优化存储空间。这些特点使倒排索引成为处理非结构化数据的理想选择。
125 1
|
7月前
|
存储 自然语言处理 搜索推荐
【Elasticsearch专栏 01】深入探索:Elasticsearch的正向索引和倒排索引是什么?
正向索引根据文档ID直接查找文档内容,适用于精确匹配场景;而倒排索引则基于文档内容构建,通过关键词快速定位相关文档,适用于全文搜索,显著提高查询效率,是搜索引擎的核心技术。
85 2
|
28天前
|
存储 自然语言处理 数据库
Elasticsearch倒排索引
【11月更文挑战第2天】
37 1
|
1月前
|
测试技术 API 开发工具
ElasticSearch核心概念:倒排索引
ElasticSearch核心概念:倒排索引
54 6
|
5月前
|
存储 缓存 自然语言处理
【Elasticsearch】Elasticsearch倒排索引详解
【Elasticsearch】Elasticsearch倒排索引详解
180 12
|
6月前
|
存储 JSON 自然语言处理
技术经验分享:Elasticsearch倒排索引结构
技术经验分享:Elasticsearch倒排索引结构
45 0
|
6月前
|
存储 自然语言处理 NoSQL
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之倒排索引(三)
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之倒排索引(三)
|
6月前
|
存储 自然语言处理 NoSQL
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之列存(二)
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之列存(二)
|
6月前
|
存储 JSON NoSQL
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之行存(一)
深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之行存(一)