建立一个新的自动完成系统,并且即使它们在句子中间,也要求使用关键词进行搜索。我有大量的书名清单,例如“史蒂夫·乔布斯自传”。用户可以选择键入“ Steve”,而不是输入“ Aut”作为查询前缀,并且仍应获得相同的结果。如何使用TRIE实现?我需要多个TRIE吗?在这方面的任何帮助都将非常有用。
答案 0 :(得分:0)
一种执行此操作的方法是在input
字段中添加多个completion
。我曾经有一个与邮政地址类似的用例。例如,当用户开始输入以下任一令牌时,应显示“ 1000 Market St,San Francisco,CA 94103”这样的地址:
因此,为了支持帽子用例,该想法是对这样的文档建立索引:
PUT addresses/_doc/1
{
"display": "1000 Market St, San Francisco, CA 94103",
"suggest" : {
"input": [
"1000 Market St, San Francisco, CA 94103",
"Market St, San Francisco, CA 94103",
"San Francisco, CA 94103",
"94103"
]
}
}
具有地址的好处是它们具有结构(街道编号,街道方向,街道名称等)。在您的情况下,对于书名,由于没有隐式结构,因此会更加困难。但是,您可以简单地在每个空格上分割输入,并索引空格后面的部分(不带停用词)。例如,对于“史蒂夫·乔布斯自传”,您将为以下输入编制索引:
具体
PUT books/_doc/1
{
"display": "Autobiography of Steve Jobs",
"suggest" : {
"input": [
"Autobiography of Steve Jobs",
"Steve Jobs",
"Jobs"
]
}
}
这样,当用户输入“ Steve”甚至是“ Jobs”时,这本书就会出现。您还可以使用权重,以便比其他变体形式更加重视准确的标题。
尝试一下,看看效果如何。