多字段類型
- 多字段特性
- 廠商名字實(shí)現(xiàn)精確匹配
- 增加一個keyword字段
- 使用不同的analyzer
- 不同語言
- pinyin字段的搜索
- 還支持為搜索和索引指定不同的analyzer
多字段特性模板
Exact Values VS Full Text
- Exact vaues v.s Full text
- Exact value:包括數(shù)字 / 日期 / 具體一個字符串(例如:"Apple Store")
- Elasticsearch 中的keyword
- 全文本,非結(jié)構(gòu)化的文本數(shù)據(jù)
- Elasticsearch中的text
- Exact value:包括數(shù)字 / 日期 / 具體一個字符串(例如:"Apple Store")
Exact Values不需要被分詞
- Elasticsearch為每一個字段創(chuàng)建一個倒排索引
- Exact Value在索引時(shí),不需要做特殊的分詞處理
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 |
自定義分詞
- 當(dāng)Elasticsearch自帶的分詞器無法滿足時(shí),可以自定義分詞器,通過資組合不同組件實(shí)現(xiàn)
- Character Filter
- Tokenizer
- Token Filter
Character Filters
- 在Tokenizer之前對文本進(jìn)行處理,例如增加刪除及替換字符。可以配置多個Character Filters.會影響Tokenizer的position和offset信息
- 一些自帶的Character Filters
- HTML strip:去除html標(biāo)簽
- Mapping:字符串替換
- Pattern replace:正則匹配替換
Tokenizer
- 將原始的文本按照一定的規(guī)則,切分為詞(term or token)
- Elasticsearch內(nèi)置的Tokenizers
- whitespace / standard / uax_url_emall / pattern / keyword / path hierarchy
- 可以用java開發(fā)插件,實(shí)現(xiàn)自己的Tokenizer
Token Filter
- 將Tokenizer輸出的單詞(term),進(jìn)行增加,修改,刪除
- 自帶的Token Filters
- Lowercase / stop / synonym(添加近義詞)
設(shè)置一個Custom Analyzer
設(shè)置一個analyzer