1.为什么使用ES
ES(Elasticsearch)作为一个开源的高扩展的分布式全文检索引擎,自2016年起已经超过Solr,成为排名第一的搜索引擎应用,具有很多独特的优点。
- 它可以为几乎所有类型的数据提供近实时的索引、搜索和分析服务。无论是结构化或非结构化数据文本、数值数据、还是地理空间数据,ES都支持高效地存储和索引,并快速的提供搜索。
- 它本身扩展性很好。可以扩展到上百台服务器,处理PB级别的数据,由于索引具有副本机制,所以它也具有高可用优点。
- 它的使用简单。通过简单的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)