我对字段("name"(有以下映射:
"name": {
"analyzer": "ngram_analyzer",
"search_analyzer": "keyword_analyzer",
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
它工作得很好,可以同时作为文本和关键字进行搜索。根据ES文件:
https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html字符串字段可以映射为全文搜索的文本字段,也可以映射为排序或聚合的关键字字段。
但我正在尝试扩展这个映射,以支持通配符搜索。
我试图修改映射(例如,如下所示(,但无法使其工作。
"name": {
"analyzer": "ngram_analyzer",
"search_analyzer": "keyword_analyzer",
"type": "text",
"fields": [{
"raw": {
"type": "wildcard"
}
}, {
"type": "keyword"
}]
}
也尝试过,
"name": {
"analyzer": "ngram_analyzer",
"search_analyzer": "keyword_analyzer",
"type": "text",
"fields": [{
"raw": {
"type": "wildcard"
}
}, {"raw": {
"type": "keyword"
}}]
}
映射应该是什么样子才能允许名称作为文本、关键字和通配符进行搜索。
您可以使用多个字段以多种方式对name
字段进行索引。修改后的索引映射将是
{
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "ngram_analyzer",
"search_analyzer": "keyword_analyzer",
"fields": {
"raw": {
"type": "wildcard"
},
"keyword": {
"type": "keyword"
}
}
}
}
}
}
现在您可以使用name
进行基于文本的搜索,使用name.raw
进行通配符搜索,name.keyword
进行关键字搜索