我是 Elasticsearch 的新手,我有一个关于使用 NGram 实现自动完成功能的问题。从互联网上,我了解到与使用内置完成建议器相比,NGram 实现允许灵活的解决方案,例如从中间匹配、突出显示等。
因此,我的一种索引类型具有以下字段映射:
"suggest_keywords": {
"type": "string",
"analyzer": "nGram_analyzer",
"search_analyzer": "whitespace_analyzer"
},
nGram 分析器配置:
"nGram_analyzer": {
"filter": [
"lowercase",
"asciifolding",
"nGram_filter"
],
"type": "custom",
"tokenizer": "whitespace"
}
以下是我将用于字段的示例数据。
"suggest_keywords": [
"Wholesale",
"Fish",
"Seafood",
"Fishmongers",
"Markets"
],
当我使用以下查询时,它将返回整个数组。因为我只需要少数
{
"query": {
"match":{
"suggest_keywords" : "food"
}
}
}
我尝试使用突出显示来提取单个术语,但突出显示的术语存在于搜索结果中的每个文档中。我尝试使用聚合,但未能编写将突出显示和聚合结合起来的查询。有可能这样做吗?
{
"query": {
"match": {
"suggest_keywords": "nge"
}
},
"highlight": {
"fields": {
"suggest_keywords": {}
}
}
}
或者是否有更好的实现从 nGram 分析数组中搜索?还是应该将所有这些关键字索引为不同的类型?
谢谢!