简介
Analysis在创建索引或搜索时指定,将文本解析成倒排索引
,以供搜索。
简单解释下倒排索引:通常书本的目录就是正排索引
,根据目录找章节;而倒排索引
就是根据内容(例如一个单词)找所在的章节。
Analyzer
analyzer
,内置或自定义,是一个包含三个构建块(依次为character filters
,tokenizers
,token filters
)的包。
例如:一个内置的english
analyzer在转换句子The QUICK brown foxes jumped over the lazy dog!
时:
- 转为小写。
- 删除对搜索无意义的词元:the(停止词,
stopwords
)。 - 归纳词干,例如:foxes → fox,jumped → jump,lazy → lazi。
- 最后添加这些条件到倒排索引中:[quick, brown, fox, jump, over, lazi, dog]。
- 当查询时,可以查询
"a query fox"
,虽然该字符串不在原文本中,但当使用了同样的analyzer
时,该句子中的单词与倒排索引中的词元可以匹配上。
Character filters
- 接收字符流,通过添加、删除、修改字符来转换字符流。
- 例如从流中去掉
<b>
这样的HTML元素。 - 可以有0或多个,按照设置的顺序调用。
Tokenizer
- 接收一个字符流,分解为词元,然后输出词元流。
- 例如,
whitespace
tokenizer就会把所有的空白符去掉,"Quick brown fox!"
就会被分解成词元:[Quick, brown, fox!]
。 - 同时Tokenizer负责记录每个词元的顺序或位置,以及原单词的起始结束字符偏移量。
- 必须而且只能有一个Tokenizer。
Token filters
- 接收词元流,可以添加、删除、修改词元。
- 例如:
lowercase
token filter将所有的词元转为小写,stop
token filter删除掉停止词,synonym
toekn filter将引入同义词到词元流中。 - Token filter不可以改变每个词元的位置或字符偏移量。
- 可以有0或多个,按照设置的顺序调用。
测试analyzers
可以在请求体中指定analyzer(或者tokenizer、token filter、Character Filter),
GET _analyze
{
"analyzer": "whitespace",
"text": "The quick brown fox."
}
GET _analyze
{
"analyzer": "english",
"text": "The QUICK brown foxes jumped over the lazy dog!"
}
GET _analyze
{
"tokenizer": "whitespace",
"filter": ["lowercase","stop"],
"text": "The QUICK brown foxes jumped over the lazy dog!"
}
从上面第二个的返回结果中可以看到位置和起始结束字符偏移量
{
"tokens" : [
{
"token" : "quick",
"start_offset" : 4,
"end_offset" : 9,
"type" : "<ALPHANUM>",
"position" : 1
},
{
"token" : "brown",
"start_offset" : 10,
"end_offset" : 15,
"type" : "<ALPHANUM>",
"position" : 2
},
{
"token" : "fox",
"start_offset" : 16,
"end_offset" : 21,
"type" : "<ALPHANUM>",
"position" : 3
},
{
"token" : "jump",
"start_offset" : 22,
"end_offset" : 28,
"type" : "<ALPHANUM>",
"position" : 4
},
{
"token" : "over",
"start_offset" : 29,
"end_offset" : 33,
"type" : "<ALPHANUM>",
"position" : 5
},
{
"token" : "lazi",
"start_offset" : 38,
"end_offset" : 42,
"type" : "<ALPHANUM>",
"position" : 7
},
{
"token" : "dog",
"start_offset" : 43,
"end_offset" : 46,
"type" : "<ALPHANUM>",
"position" : 8
}
]
}
网友评论