analyzer
定义文本字段分词器,默认对索引和查询都是有效的。
假设不使用任何分词器,创建索引并添加字段
PUT blog
PUT blog/_doc/1
{
"title": "定义文本字段分词器,默认对索引和查询都是有效的。"
}
查看词条向量(term vectors),即分词结果:
GET /blog/_termvectors/1
{
"fields": ["title"]
}
发现默认是按照单个汉字分词的。
所以,我们要根据实际情况,配置合适的分词器:
PUT blog
{
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "ik_smart"
}
}
}
}
search_analyzer
查询时候的分词器,默认情况下,索引阶段和查询阶段都使用analyzer配置的分词器,如果配置了search_analyzer,则在查询时使用search_analyzer指定的分词器。如果analyzer也没配置,则使用ES默认的分词器。
normalizer
normalizer参数用于解析前(索引或者查询阶段)的标准化配置。配置如下:
PUT blog
{
"settings": {
"analysis": {
"normalizer": {
"my_normalizer": {
"type": "custom",
"filter": ["lowercase"]
}
}
}
},
"mappings": {
"properties": {
"author": {
"type": "keyword",
"normalizer": "my_normalizer"
}
}
}
}
上面的例子定义了一个normalizer,用于将所有文本都转化为小写字母。定义的normalizer可以在mappings中使用。