Aba*_*aco 1 .net c# search-engine
我想为正在开发的软件添加研究功能。这个想法是添加某种“索引”研究,因此,当用户在另一个文本框中键入内容时,gui组件将显示过滤后的结果。例如:
User types: a
aaa
aba
aab
user types: aa
aa
aab
Run Code Online (Sandbox Code Playgroud)
等等。当然,这个东西有一个名字(因为它几乎在任何地方都被使用),但是我不知道,所以直到现在,我在网络上找不到任何有用的东西。我不需要确切的代码,只需链接到一些资源(教程等)。泰
编辑:我不是在寻找自动完成功能:如果我在文本框中键入,我想在文本框附近的(例如)列表框中看到所有过滤的结果。
您尝试做的事情被称为自动完成功能(或者是自动完成功能的一种变体,您只是在动态过滤列表),这是一个非常常见的功能。
它要求您必须能够快速查询数据,因为您必须能够在形成输入时更新列表。当然,输入可以击键的形式出现,有些人是非常快速的打字员。
如果您的列表包含在内存中并且很小,那么您最好的选择可能是在列表中过滤搜索条件(我将参考框中输入的内容)。
如果列表不包含在内存中,则需要以某种方式索引数据。通常,数据库不适用于这种情况。有些具有文本索引编制功能(SQL Server可以),并且如果适合您的需求,则可以对此进行查询。
如果您不使用数据库,则可能要考虑使用Lucene.NET索引内容。如果您的内容足够小,建议使用RAMDirectory,否则,标准FSDirectory(基于文件)会很好。
使用Lucene,您将需要使用该Contrib.Shingles软件包(不确定,它可能包含在最新版本中);这是一个n-gram过滤器,用于按字符标记项目,因此,基本上,您可以搜索前几个字符(搜索条件)并获得结果。
不管采用哪种方法,都需要考虑输入的速度。如果每次按下某个键都执行查找,则将有很多请求永远不会被应用。
通常,您可能要在搜索条件超出两个字符之后才开始搜索。此外,请跟踪已发出的请求的数量;如果您有一个返回的请求,并且已经提交了新的输入,请取消旧的请求并提交新的请求,将不会使用旧请求中的值。
对于UI组件,最好让另一个组件供应商来处理。WinForms具有的自动完成机制TextBox,Silverlight在Silverlight Toolkit中具有自动完成机制,jQuery具有网页的自动完成机制。使用其中的一种,并按照上述准则将数据改组到您的控件中。