分析数据
- 使用分析器分析文档
- 使用分析API
- 分词
- 字符过滤器
- 分词过滤器
- 提取词干
- es所包含的分析器
1、什么是分析
在文档被发送并加入倒排索引之前,Es在主体上进行的操作;
a、字符过滤器: 使用字符过滤转变字符
b、 分词器:文本切分为分词,将文本切分为单个或多分分词
c、分词过滤器: 使用分词过滤器转变分词
d、分词索引: 将这些分词存储到索引中
e、分析流程图:
原始文本数据——>字符过滤器——>分词器——>分词过滤器——>文档索引(倒排索引)
-
analyzer 分析器类型:
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 whitespace 正则表达式分词,默认匹配\W+ language analyzers lang 各种语言 snowball analyzer snowball standard tokenizer, standard filter, lower case filter, stop filter, snowball filter custom analyzer custom 一个Tokenizer, 零个或多个Token Filter, 零个或多个Char Filter
-
tokenizer 分词器类型
standard tokenizer standard edge ngram tokenizer edgeNGram keyword tokenizer keyword 不分词 letter analyzer letter 按单词分 lowercase analyzer lowercase letter tokenizer, lower case filter ngram analyzers nGram whitespace analyzer whitespace 以空格为分隔符拆分 pattern analyzer pattern 定义分隔符的正则表达式 uax email url analyzer uax_url_email 不拆分url和email path hierarchy analyzer path_hierarchy 处理类似/path/to/somthing样式的字符串
-
token filter 分词过滤器类型
standard filter standard ascii folding filter asciifolding length filter length 去掉太长或者太短的 lowercase filter lowercase 转成小写 ngram filter nGram edge ngram filter edgeNGram porter stem filter porterStem 波特词干算法 shingle filter shingle 定义分隔符的正则表达式 stop filter stop 移除 stop words word delimiter filter word_delimiter 将一个单词再拆成子分词 stemmer token filter stemmer stemmer override filter stemmer_override keyword marker filter keyword_marker keyword repeat filter keyword_repeat kstem filter kstem snowball filter snowball phonetic filter phonetic 插件 synonym filter synonyms 处理同义词 compound word filter dictionary_decompounder, hyphenation_decompounder 分解复合词 reverse filter reverse 反转字符串 elision filter elision 去掉缩略语 truncate filter truncate 截断字符串 unique filter unique pattern capture filter pattern_capture pattern replace filte pattern_replace 用正则表达式替换 trim filter trim 去掉空格 limit token count filter limit 限制token数量 hunspell filter hunspell 拼写检查 common grams filter common_grams normalization filter arabic_normalization, persian_normalization
-
char_filter 字符过滤器类型
mapping char filter mapping 根据配置的映射关系替换字符 html strip char filter html_strip 去掉HTML元素 pattern replace char filter pattern_replace 用正则表达式处理字符串
2、自定义分析器
包含零个或多个字符过滤器、1个分词器、零个或多个分词过滤器
注意:
match和match_phrase这样的查询在执行之前会执行分析步骤,而term和terms不会
3、为文档使用分词器
3.1、在创建索引的时候添加分词器
public static function index()
{
return [
'index' => 'order',
'body' => [
'settings' => [
'number_of_shards' => 2,
'number_of_replicas' => 1,
"index" => [
'analysis' => [
'analyzer' => [
'myAnalyzer' => [
//定制化的类型
'type' => 'custom',
//使用myTokenizer对文本进行分词
'tokenizer' => 'myTokenizer',
//指定文本需要经过的两个过滤器
'filter' => [
'myFilter1', 'myFilter2',
],
//设置制定的字符过滤器,会在其他分析步骤之前运行
'char_filter' => [
'myCharFilter',
],
],
],
//分词器
'tokenizer' => [
'myTokenizer' => [
'type' => 'letter'
],
],
//分词过滤器
'filter' => [
'myFilter1' => [
'type' => 'lowercase',
],
'myFilter2' => [
'type' => 'kstem',
],
],
//字符过滤器
'char_filter' => [
'myCharFilter' => [
'type' => 'mapping',
'mappings' => [
"ph=>f", "u=>you",
],
],
],
],
],
],
'mappings' => [...],
]
];
}
3.2、在映射中指定某个字段的分析器
3.3、在Elasticsearch的配置文件中设置全局的分析器
4、使用分析API来分析文本
- _analyze
API允许向Es发送任何文本,制定所使用的分析器,分词器或者分词过滤器,然后获取分析之后的分词
a、选择一个分析器
b、通过组合即兴的创建分析其器
c、基于某个字段映射的分析
5、使用词条向量来学习索引词条
- _termvector