Elasticsearch 为很多世界流行语言提供良好的、简单的、开箱即用的语言分析器集合,这些分析器承担以下四种角色:
文本拆分为单词:
The quick brown foxes → [ The, quick, brown, foxes]
大写转小写:
The → the
移除常用的 停用词:
[ The, quick, brown, foxes] → [ quick, brown, foxes]
将变型词(例如复数词,过去式)转化为词根:
foxes → fox
字段映射中直接指定分词器
title 字段将会用 english(英语)分析器替换默认的 standard(标准)分析器
PUT /my_index
{
"mappings": {
"blog": {
"properties": {
"title": {
"type": "string",
"analyzer": "english"
}
}
}
}
}
虽然通过使用 english (英语)分析器,使得匹配规则更加宽松,我们也因此提高了召回率,但却降低了精准匹配文档的能力。
为了获得两方面的优势,使用multifields(多字段)对 title 字段建立两次索引
PUT /my_index
{
"mappings": {
"blog": {
"properties": {
"title": {
"type": "string",
"fields": {
"english": {
"type": "string",
"analyzer": "english"
}
}
}
}
}
}
}
替换为该字段映射后,我们可以索引一些测试文档来展示怎么在搜索时使用两个字段:
使用most_fields query type(多字段搜索语法来)让我们可以用多个字段来匹配同一段文本。
PUT /my_index/blog/1
{ "title": "I'm happy for this fox" }
PUT /my_index/blog/2
{ "title": "I'm not happy about my fox problem" }
GET /_search
{
"query": {
"multi_match": {
"type": "most_fields",
"query": "not happy foxes",
"fields": [ "title", "title.english" ]
}
}
}
当原始english分析器不满足我们的需求时,我们可以基于 english (英语)分析器创建一个自定义分析器,然后添加一些配置。