10:搜索引擎篇(6)

本文详细介绍了倒排索引的概念,其在ES中的应用,以及中文分词的挑战和解决方案。讨论了ES的分词器种类,包括内置和第三方分词器,并提供了查看分词结果的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、什么是倒排索引?有什么好处?

二、ES了解多少?说说你们公司的ES集群架构?

三、如何进行中文分词?用过哪些分词器?

四、ES写入数据的工作原理是什么?

五、ES查询数据的工作原理是什么?

六、ES部署时,要如何进行优化?


一、什么是倒排索引?有什么好处?

正排索引:书本的目录

倒排索引:书本的索引

图书和搜索引擎的对比

图书:

正牌索引-目录页

倒排索引-索引页

搜索引擎:

正排索引-文档Id到文档内容和单词的关联

倒排索引-单词到文档Id的关系

倒排索引的核心组成

倒排索引包含两个部分:

(1)单词词典,记录所有文档的单词,记录单词到倒排列表的关联关系

(2)倒排列表(Posting List)- 记录了单词对应的文档结合,由倒排索引项组成

倒排索引项:

> 文档ID

> 词频TF -该单词在文档中出现的次数,用于相关性评分

> 位置 Postion - 单词在文档中分词的位置,用于语句搜索 (phrase query)

> 偏移 Offset-记录单词的开始结束位置,实现高亮显示

如:

ES 的倒排索引

(1)ES 的JSON 文档中的每个字段,都有自己的倒排索引

(2)可以指定对某些字段不做索引

> 优点:节省存储空间

> 缺点:字段无法被搜索


二、ES了解多少?说说你们公司的ES集群架构?

ES: 是一个基于Lucene框架的搜索引擎产品,提供了Restful风格的操作接口。 
Lucene:是一个非常高效的全文检索引擎框架。
ES的一些核心概念:
索引 index                             --> table
文档 document                      -->  row
字段 field text\keyword\byte  --> 列
映射Mapping                         --> Schema
查询方式 DSL                        --> SQL  
ES优点:
1、elasticsearch是一个基于Lucene的高扩展的分布式搜索服务器,支持开箱即用。
2、elasticsearch隐藏了Lucene的复杂性,对外提供Restful 接口来操作索引、搜索。
3、支持分布式,扩展性好,可部署上百台服务器集群,处理PB级数据。
4、近实时的获取索引数据、搜索数据。
5、降低全文检索的学习曲线,可以被任何编程语言调用。

 
ES集群架构:


三、如何进行中文分词?用过哪些分词器?

1、Analyzer 的组成

> Character Filters : 针对原始文本进行处理,如:去除html

> Tokenizer : 按照规则切分为单词

> Token Filter :将切分的单词进行加工、大小写转化、增加同义词

2、ES 内置分词器

> Standard Analyzer - 默认分词器,按词切分,小写处理

> Simple Analyzer - 按照非字母切分,非字母的都被去除,小写处理

> Stop Analyzer - 停用词过滤,小写处理,如:the, a, is

> Whitespace Analyzer - 按照空格切分,不转小写

> Keyword Analyzer - 不分词,直接将输出当作term输出

> Patter Analyzer - 正则表达式分词

> Language - 提供30多种常见语言的分词器

> Customer Analyzer - 自定义分词器

3、中文分词的难点

> 中文句子,切分成一个一个词,而不是一个一个字

> 英文中,单词有自热的空格作为分隔

> 一句中文,在不同的上下文,有不同的理解

如:这个苹果,不大好吃 / 这个苹果,不大,好吃!

4、其他中文分词插件

> ICU Analyzer

> IK Analyzer

5、查看分词粒度

http://172.31.100.175:9200/ingredients_es_index/_analyze/

{"field": "name","text": "西红柿炒鸡蛋","analyzer": "ik_smart"}

{ "tokens": [ {

            "token": "西红柿炒鸡蛋",

            "start_offset": 0,

            "end_offset": 6,

            "type": "word",

            "position": 0

  }]}


四、ES写入数据的工作原理是什么?

1、客户端发写数据的请求时,可以发往任意节点。这个节点就会成为coordinating node协调节点。
2、计算的点文档要写入的分片:计算时就采用hash取模的方式来计算。
3、协调节点就会进行路由,将请求转发给对应的primary sharding所在的datanode。
4、datanode节点上的primary sharding处理请求,写入数据到索引库,并且将数据同步到对应的replica sharding
5、等primary sharding 和 replica sharding都保存好文档了之后,返回客户端响应。


五、ES查询数据的工作原理是什么?

1、客户端发请求可发给任意节点,这个节点就成为协调节点。
2、协调节点将查询请求广播到每一个数据节点,这些数据节点的分片就会处理改查询请求。
3、每个分片进行数据查询,将符合条件的数据放在一个队列当中,并将这些数据的文档ID、节点信息、分片信息都返回给协调节点。
4、由协调节点将所有的结果进行汇总,并排序。
5、协调节点向包含这些文档ID的分片发送get请求,对应的分片将文档数据返回给协调节点,最后协调节点将数据整合返回给客户端。

六、ES部署时,要如何进行优化?

1)集群部署优化
调整ES的一些重要参数。path.data目录尽量使用SSD。定时JVM堆内存大小。 关于ES的参数,大部分情况下是不需要调优的,如果有性能问题,最好的办法是安排更合理的sharding布局并且增加节点数量。
2)更合理的sharding布局
让sharding和对应的replica sharding尽量在同一个机房。
3)Linux服务器上的一些优化策略
不要用root用户;修改虚拟内存大小;修改普通用户可以创建的最大线程数。
ES生态: ELK日志收集解决方案- filebeat(读log日志)-> logstash -> ElasticSearch -> kibana、Grafana、自研的报表平台。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thomas.Sir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值