基本的Lucene初学者q:索引和自动完成

时间:2014-01-05 12:07:15

标签: lucene lucene.net

我正在使用Lucene.NET并且有一个基本问题:

我是否需要为自动完成添加额外的索引? 我根据数据库中的两个不同的表创建了一个索引。

以下是两个文档:

stored,indexed,tokenized,termVector<URL:/Service/Zahlungsmethoden/Teilzahlung>
stored,indexed,tokenized,termVector<Website:Body:The Text of the first Page>
stored,indexed,tokenized,termVector<Website:ID:19>
stored,indexed,tokenized,termVector<Website:Title:Teilzahlung>

stored,indexed,tokenized,termVector<URL:/Service/Kundenservice/Kinderbetreeung>
stored,indexed,tokenized,termVector<Website:Body:The text of the second Page>
stored,indexed,tokenized,termVector<Website:ID:13>
stored,indexed,tokenized,termVector<Website:Title:Kinderbetreuung>

我需要为搜索创建一个下拉列表,其中包含以下建议:

例如:术语“Pag”应该建议“Page”

所以我假设对于每个文档中的每个单词(标记),我需要一个如下列表:

p
pa
pag
page

这是对的吗? 我在哪里存放这些? 在另一个索引?

或者我如何重新安排索引的现有结构以保存自动完成建议?

谢谢!

2 个答案:

答案 0 :(得分:0)

1)与上面提到的femtoRgon一样,请查看Lucene Suggest API。

2)话虽如此,执行自动建议的一种便宜方式是查找所有以您目前键入的字符串开头的单词,例如&#39; pa&#39;回归&#39;&#39; +&#39; pag&#39; +&#39; page&#39;。通配符查询将返回这些结果 - 在Lucene查询语法中,查询类似于&#39; pa *&#39;。 (您可能希望将建议仅限制为长度为2 +的字符串。)

答案 1 :(得分:0)

Mark Leighton Fisher有一种廉价的方法,但是执行通配符查询只会返回文档而不是单词。最好看一下WildcardQuery的实现。您需要使用从IndexReader中检索的Terms对象,并遍历索引中的术语。