1. Elasticsearch中分词器选择和默认
分词器,影响搜索结果,如果搜索无法命中,可以采用提取词干的方式,增加搜索的recall值,比如在英文搜索中,可以设置分词器为英文分词器。分词器有索引时的分词器及搜索时的分词器,可以在mapping中设置,索引分词器采用analyzer进行设置,搜索分词器采用search_analyzer设置,如果没有设置分词器,则索引和搜索分词器都用默认的standard分词器,如果只是设置索引分词器没有设置搜索分词器,则搜索分词器也采用索引分词器,如果analyzer和search_analyzer都设置则使用各自设置的分词器。
2. 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"
}
}
}
}
3. search_analyzer
查询时候的分词器,默认情况下,索引阶段和查询阶段都使用analyzer配置的分词器,如果配置了search_analyzer,则在查询时使用search_analyzer指定的分词器。如果analyzer也没配置,则使用ES默认的分词器。
PUT my_index
{
"mappings": {
"doc": {
"properties": {
"uid": {
"type": "keyword"
},
"name": {
"type": "text",
"analyzer": "english",
"search_analyzer": "standard"
}
}
}
}
}
配置了索引分词器为 english 查询分词器为standard分词器。