索引搜索功能

本文关键字:功能 搜索 索引 | 更新日期: 2023-09-27 18:05:41

我想添加一个研究功能,我正在开发的软件。其想法是添加某种"索引"研究,这样当用户在文本框中输入另一个gui组件时,就会显示过滤后的结果。例:

User types: a
aaa
aba
aab
user types: aa
aa
aab

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

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

索引搜索功能

你要做的就是所谓的自动补全(或者它是它的一个变体,你只是在动态地过滤列表),这是一个非常常见的功能。

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

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

如果列表不包含在内存中,那么你需要以某种方式索引你的数据。一般来说,数据库不适合处理这类事情。有些有文本索引(SQL Server有),如果它适合你的需要,你可以查询。

如果你不使用数据库,那么你可能要考虑使用Lucene。. NET索引您的内容。如果您的内容足够小,我建议使用RAMDirectory,否则,标准的FSDirectory(基于文件的)就可以了。

与Lucene,你会想要使用Contrib.Shingles包(它可能包含在最新的构建,我不确定);这是一个n-gram过滤器,它按字符对项目进行标记,所以基本上,您可以搜索前几个字符(搜索标准)并获得结果。

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

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

当涉及到UI组件时,最好让其他组件供应商处理这个问题;WinForms对TextBox有一个自动完成机制,Silverlight在Silverlight工具包中有一个自动完成机制,jQuery对网页有一个自动完成机制。使用其中一个,并按照上面的指导方针将数据洗牌到控件中。

如果你谈论的是WinForms TextBox,那么你可以看看TextBox的AutomCompleteMode和AutoCompleteCustomSource属性