前缀查询或通配符查询
使用 prefix 查询或 wildcard 查询可以实现简单的自动补全功能。这些查询可以匹配具有特定前缀或模式的词条。然而,这种方法在大型数据集上可能性能较差,因为它需要遍历倒排索引中的所有词条以找到匹配项。
示例(前缀查询):
{
"query": {
"prefix": {
"field_name": "user_input"
}
}
}
示例(通配符查询):
{
"query": {
"wildcard": {
"field_name": "user_input*"
}
}
}
Completion Suggester
Completion Suggester 是 Elasticsearch 提供的一种更高效的自动补全和文档建议功能。它使用专门的数据结构(FST,有限状态转换器)来实现快速的词条查找。与前缀查询和通配符查询相比,Completion Suggester 查询性能更好,特别适用于大型数据集。
要使用 Completion Suggester,需要执行以下步骤:
1.将自动补全字段映射为 completion 类型。
例如:
{
"mappings": {
"properties": {
"suggest": {
"type": "completion"
},
...
}
}
}
2.索引数据
索引包含自动补全字段的数据。例如,将酒店名称索引为 completion 类型以支持酒店名称的自动补全。
3.查询条件
{
"suggest": {
"hotel_suggestion": {
"prefix": "关键词",
"completion": {
"field": "suggest",
"size": 10
}
}
}
}
此查询将返回与用户输入匹配的前 10 个建议。