一、概念介绍
全文搜索引擎会用某种算法对要建索引的文档进行分析, 从文档中提取出若干Token(词元), 这些算法称为Tokenizer(分词器), 这些Token会被进一步处理, 进行normalization时态转化,转成小写等, 这些处理算法被称为Token Filter(词元处理器), 被处理后的结果被称为Term(词), 文档中包含了几个这样的Term被称为Frequency(词频)。 引擎会建立Term和原文档的Inverted Index(倒排索引), 这样就能根据Term很快到找到源文档了。 文本被Tokenizer处理前可能要做一些预处理, 比如去掉里面的HTML标记, 这些处理的算法被称为Character Filter(字符过滤器), 这整个的分析算法被称为Analyzer(分析器)。
总结:采用xmind画了一个图
二、ES中的分词器
从第一部分内容可以看出:Analyzer(分析器)由Tokenizer(分词器)和Filter(过滤器)组成。
***以ecommerce索引里的producer的分析器来存储"jiajieshi producer mmy"这个内容 查看底层如何存储
GET /ecommerce/_analyze?field=producer
{
"text": "jiajieshi producer mmy"
}
#查看索引ecommerce的mappings
GET /ecommerce/_mappings?pretty
以ecommerce索引里es的内置分析器standard来存储"jiajieshi producer mmy"这个内容 查看底层如何存储
GET /ecommerce/_analyze?analyzer=standard
{
"text": "jiajieshi producer mmy"
}
###以默认的whitespace分词器来分词
GET /ecommerce/_analyze?analyzer=whitespace
{
"text": "我是中国人"
}
1、ES内置分析器
standard analyzer | standard | standard tokenizer, standard filter, lower case filter, stop filter(默认的分词器) |
simple analyzer | simple | lower case tokenizer |
stop analyzer | stop | lower case tokenizer, stop filter |
keyword analyzer | keyword | 不分词,内容整体作为一个token(not_analyzed) |
pattern analyzer |