1.注册分析器
nalyzer
、 tokenizer
、 filter
可以在elasticsearch.yml 配置
index :
analysis :
analyzer :
standard :
type: standard
stopwords : [stop1, stop2]
myAnalyzer1 :
type: standard
stopwords : [stop1, stop2, stop3]
max_token_length : 500
myAnalyzer2 :
tokenizer : standard
filter : [standard, lowercase, stop]
tokenizer :
myTokenizer1 :
type: standard
max_token_length : 900
myTokenizer2 :
type: keyword
buffer_size : 512
filter :
myTokenFilter1 :
type: stop
stopwords : [stop1, stop2, stop3, stop4]
myTokenFilter2 :
type: length
min : 0
max : 2000
analyzer:ES内置若干analyzer, 另外还可以用内置的character filter
, tokenizer
, token filter
组装一个analyzer(custom analyzer)
index :
analysis :
analyzer :
myAnalyzer :
tokenizer : standard
filter : [standard, lowercase, stop]
如果你要使用第三方的analyzer插件,需要先在配置文件elasticsearch.yml中注册, 下面是配置IkAnalyzer的例子
index:
analysis:
analyzer:
ik:
alias: [ik_analyzer]
type: org.elasticsearch.index.analysis.IkAnalyzerProvider
当一个analyzer
在配置文件中被注册到一个名字(logical name)下后,在mapping
定义或者一些API里就可以用这个名字来引用该analyzer了。
二.ES中内置的analyzer,tokenizer,filter
ES内置的一些analyzer
analyzer | logical name | description |
---|---|---|
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 | 正则表达式分词,默认匹配 |
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:ES内置的tokenizer
列表
tokenizer | logical name | description |
---|---|---|
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:ES内置的token filter
列表。
token filter | logical name | description |
---|---|---|
standard filter | standar | |
dascii folding filter | ascii folding | |
lengthfilter | length | 去掉太长或者太短的 |
lowercase filter | lowercase | 转成小写 |
ngram filter | nGram | |
edge ngram filter | edgeNGram | |
porter stem filter | porterStem | 波特词干算法 |
shingle filter | shingle | 定义分隔符的正则表达式 |
stop filter | stop | 移除 stop wordsword |
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 filte | rphonetic | 插件 |
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 filter | 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 |
character filter:ES内置的character filter
列表
character filter | logical name | description |
---|---|---|
mapping char filter | mapping | 根据配置的映射关系替换字符 |
html strip char filter | html_strip | 去掉HTML元素 |
pattern replace char filter | pattern_replace | 用正则表达式处理字符串 |
做全文搜索就需要对文档分析、建索引。从文档中提取词元(Token)的算法称为分词器(Tokenizer),在分词前预处理的算法称为字符过滤器(Character Filter),进一步处理词元的算法称为词元过滤器(Token Filter),最后得到词(Term)。这整个分析算法称为分析器(Analyzer)。
文档包含词的数量称为词频(Frequency)。搜索引擎会建立词与文档的索引,称为倒排索引(Inverted Index)。
Analyzer 按顺序做三件事:
- 使用 CharacterFilter 过滤字符
- 使用 Tokenizer 分词
- 使用 TokenFilter 过滤词
每一部分都可以指定多个组件。
Elasticsearch 默认提供了多种 CharacterFilter、Tokenizer、TokenFilter、Analyzer,你也可以下载第三方的 Analyzer 等组件。
Analyzer 一般会提供一些设置。如 standard Analyzer 提供了 stop_words
停用词过滤配置。
以下样例构造了名为 standard
的 standard Analyzer 类型的带停用词列表的分析器:
PUT /my-index/_settings
{
"index": {
"analysis": {
"analyzer": {
"standard": {
"type": "standard",
"stop_words": [ "it", "is", "a" ]
}
}
}
}
}
你也可以通过 Setting API 构造组合自定义的 Analyzer。如:
PUT /my-index/_settings
{
"index": {
"analysis": {
"analyzer": {
"custom": {
"type": "custom",
"char_filter": [ "html_strip" ],
"tokenizer": "standard",
"filter": [ "lowercase", "stop", "snowball" ]
}
}
}
}
}
这构造了名为 custom
的 Analyzer,它完成以下工作:
- 使用
html_strip
字符过滤器,移除 html 标签 - 使用
standard
分词器,分词 - 使用
lowercase
词过滤器,转为小写单词 - 使用
stop
词过滤器,过滤停用词 - 使用
snowball
词过滤器,用 snowball 雪球算法 提取词干
https://www.jianshu.com/p/c47cd5313653
来源:oschina
链接:https://my.oschina.net/xiaominmin/blog/4312153