虽然Elasticsearch带有一些现成的分析器,但可以通过组合Character filter、Tokenizer、token filter
来创建自定义的分析器。它使用以下相应的组合:
Character filter
Tokenizer
Token filter
如果使用默认的standard analyzer分析HTML文本,则不能识别HTML字符编码:
POST /_analyze
{
"text": "I'm in a <em>good</em> mood - and I <strong>love</strong> you"
}
Elasticsearch中自带一个html_strip
字符过滤器,可以帮我们解析HTML编码:
如果我们想实现以下功能,将三个组件组合起来实现一个自定义分析器能实现:
创建 analyzer_test
索引,并在里面指定创建自定义分析器:
PUT /analyzer_test
{
"settings": {
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"type": "custom",
"char_filter": ["html_strip"],
"tokenizer": "standard",
"filter": [
"lowercase",
"stop"
]
}
}
}
}
}
使用my_custom_analyzer
,成功满足上述的要求:
POST /analyzer_test/_analyze
{
"analyzer": "my_custom_analyzer",
"text": "I'm in a <em>good</em> mood - and I <strong>love</strong> you"
}