让搜索引擎更懂你-Elasticsearch自定义分词开发实践

本文介绍了Elasticsearch(ES)的倒排索引和分词原理,阐述了自定义分词如何解决模糊查询性能低和精确查询匹配问题。通过自定义分词服务开发,实现了无需重启集群即可动态更新分词词典,提高了查询效率和准确性。
摘要由CSDN通过智能技术生成

1.为什么使用ES

ES(Elasticsearch)作为一个开源的高扩展的分布式全文检索引擎,自2016年起已经超过Solr,成为排名第一的搜索引擎应用,具有很多独特的优点。

  1. 可以为几乎所有类型的数据提供近实时的索引、搜索和分析服务。无论是结构化或非结构化数据文本、数值数据、还是地理空间数据,ES都支持高效地存储和索引,并快速的提供搜索。
  2. 本身扩展性很好。可以扩展到上百台服务器,处理PB级别的数据,由于索引具有副本机制,所以它也具有高可用优点。
  3. 它的使用简单。通过简单的RESTful API隐藏了Lucene的复杂性,从而让全文搜索变得简单易用。

2.什么是自定义分词

在说ES自定义分词之前,首先要弄清楚ES的倒排索引和分词原理。

2.1 倒排索引

ES每个分片都是一个Luence,Luence基于倒排索引进行搜索。在弄清楚倒排索引之前,先了解一下正排索引。正排索引存在于我们生活的方方面面,比如图书馆中,找一本书的流程是先找到哪个科室,哪个书架,第几层,从哪边数第几本才能找到我们想要的那本书。通过这个例子可以看出,正排索引是文档ID(可以理解为科室、书架)到文档内容、单词(可以理解为书)的关联关系。

如果我们在图书馆查询带有Elasticsearch字样的书籍时候,正排索引会找对应类型的科室、书架,最后找到很多书,再逐个查看哪一本带有Elasticsearch字样。可以想象,当图书馆的书足够多时,正排索引的查询会变得很慢。倒排索引解决了正排索引出现的问题,当我们查询带有Elasticsearch字样的书籍时,可以根据Elasticsearch这个词,直接找到对应的书的id,它是单词到文档Id的关联关系。

倒排索引建立的是分词(Term)和文档(Document)之间的映射关系,在倒排索引中,数据是面向词(Term)而不是面向文档的。

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

2.2 分词

ES是基于倒排索引的一种搜索引擎,倒排索引的关键就是分词(Term),在往索引中插入数据的时候,ES会把文本转换成一系列单词(Term or Token),这个过程就是分词,也叫做文本分析,在ES里面称为Analysis。

在ES中,分词器(Analyzer)是专门用来分词的组件,它负责对写入的文本数据按照一定的规则进行分词。Analyzer主要有字符过滤器(Character Filters)、分词器(Tokenizer)和token过滤器(Token Filters)组成。

1.字符过滤器(Character Filters)

字符过滤器以字符流的形式接收原始⽂本,并可以通过添加、删除或更改字符来转换,比如去除html特殊标记符。⼀个Analyzer可能有0个或多个字符过滤器

2.分词器(Tokenizer)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值