如何在ElasticSearch中使用通配符以多种方式索引同一字段



我对字段("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进行关键字搜索

相关内容

最新更新