如果你只有 1000 个句子,你可能不需要像 lucene 这样强大的索引器。我不确定您是要执行“完成句子”建议还是“建议具有相同关键字的其他查询”建议。以下是两者的解决方案:
假设您要完成用户输入的句子,那么您可以将所有字符串放入 aSortedSet
中,并使用该tailSet
方法获取比输入字符串“更大”的字符串列表(因为字符串比较器认为 a以字符串A
开头的较长字符串B
要“大于” B
)。然后,遍历返回的集合的前几个条目tailSet
以创建一组字符串,其中第一个inputString.length()
字符与输入字符串匹配。只要第一个inputString.length()
字符与输入字符串不匹配,您就可以停止迭代。
如果你想做关键词建议而不是“完成句子”建议,那么开销取决于你的句子有多长,以及句子中有多少独特的词。如果这个集合足够小,您将能够摆脱 ,您将HashMap<String,Set<String>>
关键字映射到包含它们的句子。然后,您可以通过与集合相交来处理多字查询。
在这两种情况下,我可能首先将所有字符串转换为小写(假设这在您的应用程序中是合适的)。我认为这两种解决方案都不会扩展到数十万条建议。其中任何一个都做你想做的事吗?如果您愿意,很乐意提供代码。