多字段类型
- 多字段特性
- 厂商名字实现精确匹配
- 增加一个keyword字段
- 使用不同的analyzer
- 不同语言
- pinyin字段的搜索
- 还支持为搜索和索引指定不同的analyzer

多字段特性模板
Exact Values VS Full Text
- Exact vaues v.s Full text
- Exact value:包括数字 / 日期 / 具体一个字符串(例如:"Apple Store")
- Elasticsearch 中的keyword
- 全文本,非结构化的文本数据
- Elasticsearch中的text
- Exact value:包括数字 / 日期 / 具体一个字符串(例如:"Apple Store")
Exact Values不需要被分词
- Elasticsearch为每一个字段创建一个倒排索引
- Exact Value在索引时,不需要做特殊的分词处理
PUT logs/_doc/1
{
"level": "DEBUG"
}
PUT logs/_doc/2
{
"level": "INFO"
}
PUT logs/_doc/3
{
"level": "INFO"
}
PUT logs/_doc/4
{
"level": "ERROR"
}
Level倒排表
| 倒排表 | |
|---|---|
| DEBUG | 1 |
| INFO | 2,3 |
| ERROR | 4 |
自定义分词
- 当Elasticsearch自带的分词器无法满足时,可以自定义分词器,通过资组合不同组件实现
- Character Filter
- Tokenizer
- Token Filter
Character Filters
- 在Tokenizer之前对文本进行处理,例如增加删除及替换字符。可以配置多个Character Filters.会影响Tokenizer的position和offset信息
- 一些自带的Character Filters
- HTML strip:去除html标签
- Mapping:字符串替换
- Pattern replace:正则匹配替换
Tokenizer
- 将原始的文本按照一定的规则,切分为词(term or token)
- Elasticsearch内置的Tokenizers
- whitespace / standard / uax_url_emall / pattern / keyword / path hierarchy
- 可以用java开发插件,实现自己的Tokenizer
Token Filter
- 将Tokenizer输出的单词(term),进行增加,修改,删除
- 自带的Token Filters
- Lowercase / stop / synonym(添加近义词)
设置一个Custom Analyzer

设置一个analyzer