介绍
本章会介绍es的多字段特性和自定义Analyzer的使用
多字段特性
- 需要精准匹配时,增加一个keyword字段
- 使用不同的analyzer
-- 不同语言
-- 拼音
-- 还支持不同的搜索和索引指定不同的analyzer
es的多字段特性包含如上的实现的精准匹配的keyword和使用不同的analyzer产生的分词
精确值和全文本
精确值:包含数字,日期或者是具体的一个字符串,这些都是在es中的keyword
全文本:是一种非结构化的数据,是es中test类型的值
如上我们也可以看出,精确值是不会被分词了。我们知道es会为每个字段设置倒排索引,并且会为每个字段进行分词,但是在精确值的时候,es就不会使用分词。
自定义分词器
之前介绍过分词器,介绍过character Filter,Tokenizer和Token Filter,在这!https://www.jianshu.com/p/b7613840e3b8
这里就不再赘述了,接下来看几个例子来了解如何自定义分词器
PUT /my_index
{
"settings": {
"analysis": {
"char_filter": {
"&_to_and": {
"type": "mapping",
"mappings": [ "&=> and "]
}},
"filter": {
"my_stopwords": {
"type": "stop",
"stopwords": [ "the", "a" ]
}},
"analyzer": {
"my_analyzer": {
"type": "custom",
"char_filter": [ "&_to_and" ],
"tokenizer": "standard",
"filter": [ "my_stopwords" ]
}}
}}}
如上,我们定义了一个分词器,其中含义我一一解析下:
- 定了一个mapping类型的char_filter,功能是把&映射成and
- 接着是一个stop类型的filter,会过滤"the", "a"
总结
本章介绍了es中的多字段特性的实现,分别是通过两种方式来实现;还分别叙述了精确值和全文本;最后通过一个例子讲述了饿自定义analyzer的实现
引用
https://www.elastic.co/guide/cn/elasticsearch/guide/current/custom-analyzers.html
网友评论