让我们说当我在用户输入字段时,我想提供大约1000个句子作为建议。
我在考虑运行lucene in memory search
,然后将结果输入suggestions set
。
运行搜索的trigger
为space char
和exit from the input field
。
我打算在GWT
中使用它,所以客户端只是从服务器获取结果。
我不想做谷歌正在做的事情;他们完成每个单词,然后对每组关键字提出建议。我只想检查关键字并根据它提出建议。有点像我在stackoverflow上输入问题的标题时。
答案 0 :(得分:2)
我正在研究类似的解决方案。这篇题为Effective Phrase Prediction的论文对我很有帮助。您还必须优先考虑建议
答案 1 :(得分:1)
如果你只有1000个句子,你可能不需要像lucene那样强大的索引器。我不确定您是否要“完成句子”建议或“建议具有相同关键字的其他查询”建议。以下是两者的解决方案:
假设您要完成用户输入的句子,那么您可以将所有字符串放入SortedSet
,并使用tailSet
方法获取“比输入字符串“更大”(因为string comparator认为以字符串A
开头的字符串B
比B
“更大”更长。然后,迭代tailSet
返回的集合的前几个条目,以创建一组字符串,其中第一个inputString.length()
字符与输入字符串匹配。只要第一个inputString.length()
字符与输入字符串不匹配,就可以停止迭代。
如果你想做关键字建议而不是“完成句子”建议,那么开销取决于你的句子有多长,以及句子中有多少独特的单词。如果此设置足够小,您将能够使用HashMap<String,Set<String>>
,并将关键字映射到包含它们的句子。然后,您可以通过交叉集来处理多字查询。
在这两种情况下,我可能会首先将所有字符串转换为小写(假设在您的应用程序中是合适的)。我认为任何一种解决方案都不会扩展到成千上万的建议。做其中任何一个你想要的吗?如果你愿意,很乐意提供代码。