索引搜索功能

时间:2011-08-12 19:53:47

标签: c# .net search-engine

我想为我正在开发的软件添加研究功能。这个想法是添加某种“索引”研究,所以当用户在另一个文本框中键入时,gui-component显示过滤结果。例如:

User types: a
aaa
aba
aab

user types: aa
aa
aab

等等。 当然这个东西有一个名字(因为它几乎用于所有地方),但我不知道它,所以直到现在我在网上找不到任何有用的东西。我不需要确切的代码,只需要一些资源的链接(教程等)。 TY。

编辑:我不是在寻找自动完成功能:如果我输入文本框,我希望在文本框附近的(例如)列表框中看到所有已过滤的结果。

2 个答案:

答案 0 :(得分:4)

您尝试做的事情被称为autocomplete(或者它的变体,您只是即时过滤列表),这是一个非常常见的功能。

它要求您能够快速查找数据,因为您必须能够在输入形成时更新列表。当然,输入可以以击键的形式出现,有些人是非常快的打字员。

如果您的列表包含在内存中并且相当小,那么您最好的选择可能是在列表中筛选搜索条件(我将参考框中输入的内容)。

如果您的列表未包含在内存中,那么您需要以某种方式索引数据。通常,数据库不适合这类事情。有些人有文本索引(SQL Server),如果这符合你的需要,你可以查询它。

如果您没有使用数据库,那么您可能需要考虑使用Lucene.NET为您的内容编制索引。如果您的内容足够小,我建议您使用RAMDirectory,否则,标准FSDirectory(基于文件)会很好。

使用Lucene,您将要使用Contrib.Shingles package(它可能包含在最新版本中,我不确定);这是一个n-gram过滤器,它按字符标记项目,所以基本上,你可以搜索前几个字符(搜索条件)并获得结果。

无论采用何种方法,您都需要考虑输入的输入速度。如果每按一次键执行查找,您将有大量的请求永远不会应用。

通常,您可能希望在搜索条件超出两个字符后开始搜索。另外,跟踪所做的请求数量;如果您有要求返回并且已提交新输入,请取消旧请求并提交新请求,旧请求中的值将不会被使用。

说到UI组件,让另一个组件供应商处理这个问题会更好; WinForms具有TextBox的自动完成机制,Silverlight在Silverlight Toolkit中具有自动完成功能,jQuery具有网页自动完成机制。使用其中一个并使用上述指南将数据随机播放到您的控件中。

答案 1 :(得分:0)

如果您正在谈论WinForms TextBox,那么您可能会查看TextBox的AutomCompleteMode和AutoCompleteCustomSource属性。