首先把一个文本块分析成一个个单独的词(term),为了后面的倒排索引做准备。然后标准化这些词为标准形式,提高它们的“可搜索性”,这些工作是分析器(analyzers)完成的。一个分析器(analyzers)是一个组合,实现以下三个功能:
- 字符过滤器:字符串经过字符过滤器(character filter)处理,他们的工作是在标记化之前处理字符串。字符过滤器能够去除HTML标记,或者转换
&为and - 分词器:分词器(tokenizer)被标记化成独立的词,一个简单的分词器(tokenizer)可以根据空格或逗号将单词分开。
- 词元过滤器:每个词都通过所有标记过滤(token filters)处理,他可以修改词(例如将
Quick转为小写),去掉词(例如像a、and、the等),或者增加词(例如同义词像jump和leap)。
Elasticsearch提供了很多内置的字符过滤器,分词器和标记过滤器。这些可以组合来创建自定义过滤器以应对不同的需求。
分析器
POST _analyze
{
"analyzer": "standard",
"text": "this is a test"
}
使用standard分析器,该结果返回this is a test,在这个分词器下,将会分析成this,is,a,test四个词。
使用自定义分词器
POST _analyze
{
"tokenizer": "keyword",
"filter": ["lowercase"],
"char_filter": ["html_strip"],
"text": "this is a <b>Test</b>"
}
结果返回:
{
"tokens": [
{
"token": "this",
"start_offset": 0,
"end_offset": 4,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "is",
"start_offset": 5,
"end_offset": 7,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "a",
"start_offset": 8,
"end_offset": 9,
"type": "<ALPHANUM>",
"position": 2
},
{
"token": "test",
"start_offset": 10,
"end_offset": 14,
"type": "<ALPHANUM>",
"position": 3
}
]
}
使用keyword分词器、lowercase词元过滤器、html_strip字符过滤器,这三个部分组成一个分词器。
上面的结果返回:
{
"tokens": [
{
"token": "this is a test",
"start_offset": 0,
"end_offset": 21,
"type": "word",
"position": 0
}
]
}
文本分析与倒排索引
本文探讨了文本块分析成独立词汇的过程,包括字符过滤、分词及词元过滤,详细介绍了分析器如何提高词的可搜索性,并展示了Elasticsearch内置组件的灵活运用。
1891

被折叠的 条评论
为什么被折叠?



