ElasticSearch之分析器

最近正在看ElasticSearch方面的东西,下面来记录并分享下ElasticSearch的分析器与过滤器是如何使用的:

一、简介
分析器就是以某种我们需要的方式来分析数据或查询语句(例如当我们基于空格和小写字母来划分单词时,可以不用担心用户输入的下划线和大写字母)。在创建索引及搜索时ElasticSearch允许使用不同的分析器,因此可以在搜索的各个阶段选择不同的数据处理方式。使用分析器时只需在相应的字段属性中指定分析器的名称即可,故而我们可以指定要用的分析器。

二、内置分析器
ElasticSearch内置了许多分析器可供使用:
1)standard:方便大多数欧洲语言使用的标准分析器。
2)simple:基于非字母字符进行分词并转换为小写字母的分析器。
3)whitespace:基于空格进行分词的分析器。
4)stop:与simple分析器相类似,增加了停用词过滤功能。
5)keyword:该分析器非常简单,它只是将提供的取值全部放行。也可以把相应的字段指定为not_analyzed达到相同的目的。
6)pattern:该分析器允许利用正则表达式对文本进行灵活的划分。
7)language:这是为特定语言所设计的分析器。
8)snowball:与standard分析器相类似,另外还提供了stemming提取算法。

三、自定义分析器
ElasticSearch允许自定义新的分析器。 自定义分析器时需要在映射文件中添加一个setting部分,它保存ElasticSearch创建索引时所需的信息。settings自定义如下:

"settings":{
	"index":{
		"analysis":{
			"analyzer":{
				"en":{
					"tokenizer":"standard",
					"filter":[
						"asciifolding",
						"lowercase",
						"ourEnglishFilter"
					]
				}
			},
			"filter":{
				"ourEnglishFilter":{
					"type":"kstem"
				}
			}
		}
	}
}

如上所示,我们指定自己想要一个名为en的新分析器。每个分析器由一个分词和多个过滤器组成。en分析器由standard分词器和3个过滤器组成:asciifolding、lowercase(默认情况下可用)和ourEnglishFilter(自定义过滤器)。
定义一个过滤器,需要指定过滤器的名字、类型(type属性),以及该类型所需的其它参数。
带有自定义分析器的映射如下所示:

{
	“settings”:{
		"index":{
			"analysis":{
				"analyzer":{
					"en":{
						"tokenizer":"standard",
						"filter":[
							"asciifolding",
							"lowercase",
							"ourEnglishFilter"
						]
					}
				},
				"filter":{
					"ourEnglishFilter":{
						"type":"kstem"
					}
				}
			}
		}
	},
	"mappings":{
		"post":{
			"properties":{
				"id":{"type":"long", "store":"yes", "percision_step":"0"},
				"name":{"type":"string","store":"yes","index":"analyzed", "analyzer":"en"}
			}
		}
	}
}

四、_analyzer字段
用来指定一个字段值,该值可以用于作为解析该字段所属文档的分析器的名称。假设有一些运行着的软件,用来检测某文档的撰写语言,并且将该信息存储在文档的language字段,并且希望该信息选择正确的分析器,实现这些仅需要在映射文件中添加如下语句:

"_analyzer":{
	"path":"language"
}

整个映射文件变成如下样式:

{
	“mappings”:{
		"post":{
			"_analyzer":{
				"path":"language"
			},
			"properties":{
				"id":{"type":"long", "store":"yes","precision_step":"0"},
				"name":{"type":"string","store":"yes","index":"analyzed"},
				"language":{"type":"string", "store":"yes", "index":"not_analyzed"}
			}
		}
	}
}

注:需定义一个与language字段值同名的分析器。

五、默认分析器
指定一个分析器为默认分析器,如果未指明用哪个分析器,则使用默认分析器。与在映射文件的settings中配置一个定制分析器的方式相同,只不过是使用default关键字替代指定分析器的名称,为了使我们上面定义的分析器默认使用,我们可以将en分析器改为如下样式:

{
	“settings”:{
		"index":{
			"analysis":{
				"analyzer":{
					"default":{
						"tokenizer":"standard",
						"filter":[
							"asciifolding",
							"lowercase",
							"ourEnglishFilter"
						]
					}
				},
				"filter":{
					"ourEnglishFilter":{
						"type":"kstem"
					}
				}
			}
		}
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值