首页 > 其他分享 >elasticsearch相关

elasticsearch相关

时间:2024-04-16 11:34:03浏览次数:19  
标签:搜索 词条 倒排 索引 文档 elasticsearch 相关 id

es,倒排索引

倒排索引的概念是基于MySQL这样的正向索引而言的。

倒排索引中有两个非常重要的概念:

- 文档(`Document`):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息
- 词条(`Term`):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条

 

**创建倒排索引**是对正向索引的一种特殊处理,流程如下:

- 将每一个文档的数据利用算法分词,得到一个个词条
- 创建表,每行数据包括词条、词条所在文档id、位置等信息
- 因为词条唯一性,可以给词条创建索引,例如hash表结构索引

 

倒排索引的**搜索流程**如下(以搜索"华为手机"为例):

1)用户输入条件`"华为手机"`进行搜索。

2)对用户输入内容**分词**,得到词条:`华为`、`手机`。

3)拿着词条在倒排索引中查找,可以得到包含词条的文档id:1、2、3。

4)拿着文档id到正向索引中查找具体文档。

 

那么为什么一个叫做正向索引,一个叫做倒排索引呢?

- **正向索引**是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是**根据文档找词条的过程**。

- 而**倒排索引**则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是**根据词条找文档的过程**。

 

**正向索引**:

- 优点:
- 可以给多个字段创建索引
- 根据索引字段搜索、排序速度非常快
- 缺点:
- 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。

 

**倒排索引**:

- 优点:
- 根据词条搜索、模糊搜索时,速度非常快
- 缺点:
- 只能给词条创建索引,而不是字段
- 无法根据字段做排序

 

- Mysql:擅长事务类型操作,可以确保数据的安全和一致性

- Elasticsearch:擅长海量数据的搜索、分析、计算

 

索引库的CRUD

1.创建索引库和映射

- 请求方式:PUT
- 请求路径:/索引库名,可以自定义
- 请求参数:mapping映射

案例:

PUT /heima
{
  "mappings": {
    "properties": {
      "info":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "email":{
        "type": "keyword",
        "index": false
      },
      "name":{
        "type": "keyword",
        "index": false
      }
    }
  }
}

2.查询索引库

- 请求方式:GET

- 请求路径:/索引库名

- 请求参数:无

案例

GET /heima

3.修改索引库

倒排索引结构虽然不复杂,但是一旦数据结构改变(比如改变了分词器),就需要重新创建倒排索引,这简直是灾难。因此索引库**一旦创建,无法修改mapping**。

虽然无法修改mapping中已有的字段,但是却允许添加新的字段到mapping中,因为不会对倒排索引产生影响。

PUT /heima/_mapping
{
  "properties":{
    "sex":{//新字段名
      "type": "keyword",
        "index": false
    }
  }
}

4.删除索引库

- 请求方式:DELETE

- 请求路径:/索引库名

- 请求参数:无

DELETE /heima

 

文档操作

1.新增文档

POST /heima/_doc/1
{
  "name":"李白",
  "sex":"男",
  "email":"[email protected]",
  "info":"java开发程序员"
}

 

标签:搜索,词条,倒排,索引,文档,elasticsearch,相关,id
From: https://www.cnblogs.com/gstszbc/p/18137735

相关文章

  • rabbitmq相关
    工作队列模型workQueue,多个消费者绑定到一个队列,当队列堆积消息时,可使用work模型。多个消费者绑定一个队列,同一条消息只会被一个消费者处理通过设置prefetch来控制消费者预取的消息数量spring:rabbitmq:listener:simple:prefetch:1#每次只能获取......
  • 公文相关字体下载
    为提高党政机关公文的规范化、标准化水平,2012年6月29日,国家质量监督检验检疫总局、国家标准化管理委员会发了《党政机关公文格式》国家标准(GB/T9704-2012),该标准于2012年月7月1日起正式实施,该份文件可以在国家标准全文公开系统中查看。       仿宋,是一种中文字体。......
  • react native调试相关技巧
    ReactNative的Debug基础:https://reactnative.dev/docs/next/debugging   调出开发菜单DevMenu。cmd+D或Device->Shake   在DevMenu上可以选择“ShowElementInspector”,显示UI上的组件,但是这是直接在app上显示,不清楚,最好在DevTools上来查看元素。 ......
  • vue:日期的相关方法
    1、获取当天日期,格式:yyyy-MM-ddgetCurrentDate(n){vardd=newDate();if(n){dd.setDate(dd.getDate()-n);}varyear=dd.getFullYear();varmonth=dd.getMonth()+1<10?"0"+(dd.getMonth......
  • 算法相关读书笔记
    由于算法导论中涉及大量数学公式,在腾讯文档才能友好的展示,因此下面分享的为腾讯文档的链接个人能力有限,可能有的理解是错误的,请谅解,仅供分享和参考【腾讯文档】算法导论1~3部分【腾讯文档】算法导论第4~5部分【腾讯文档】算法导论第6部分22~24章【腾讯文档】算法导论第6部分2......
  • 浏览器相关问题
    1.https与http混用导致浏览器请求MixedContent1.1临时解决,修改浏览器设置1.2根本解决推荐升级对应http为https......
  • Docker从入门到精通:Docker镜像相关命令学习
    简介在Docker中,管理镜像(Images)是非常重要的,因为镜像是容器的基础。本文将介绍一些常用的Docker镜像管理命令,帮助你有效地管理和操作Docker镜像。dockerimages查看本地已有的镜像列表,可以使用dockerimages命令:dockerimages-REPOSITORY镜像的仓库源-TAG镜......
  • ES7.17.20连接时报错:java.lang.NoSuchMethodError: org.elasticsearch.client.Request
    1.报错详情:java.lang.NoSuchMethodError:org.elasticsearch.client.RequestOptions$Builder.removeHeader(Ljava/lang/String;)Lorg/elasticsearch/client/RequestOptions$Builder; atco.elastic.clients.transport.rest_client.RestClientOptions.addBuiltinHeaders(RestCli......
  • python路径相关操作:os.path
    Windows路径格式importos#当前python文件位置:T:\ProgrammingPractice\python_path\test.py#给定的路径path=r'D:\AAA\BBB\CCC\x.jpg'#path='D:\\AAA\\BBB\\CCC\\x.jpg'#获取路径的目录部分dir=os.path.dirname(path)#获取最后一个目录名last......
  • 【Nano Framework ESP32 篇】刷入 nanoCLR 固件以及相关问题
    老周在几个世纪前曾写过树莓派相关的iOT水文,之所以没写NanoFramework相关的内容,是因为那时候这货还不成熟,可玩性不高。不过,这货现在已经相对完善,老周都把它用在项目上了——第一个是自制的智能插座,这个某宝上50多块可以买到,搜“esp32插座”就能找到。一种是86型盒子的,带屏......