2011-08-12 146 views
1

我想爲我正在開發的軟件添加研究功能。這個想法是添加某種「索引」研究,所以當用戶在另一個文本框中鍵入時,gui-component會顯示過濾結果。例如:已編入索引的搜索功能

User types: a 
aaa 
aba 
aab 

user types: aa 
aa 
aab 

等等。 確定這個東西有一個名字(因爲它幾乎在任何地方都可以使用),但是我不知道它,所以直到現在我在網上找不到任何有用的東西。我不需要確切的代碼,只是一些資源的鏈接(教程等)。 TY。

編輯:我不是在尋找一個自動完成功能:如果我在文本框中輸入,我想看到在文本框附近(例如)列表框中的所有篩選結果。

+3

這聽起來像「自動完成」給我。 – David

+0

沒錯。那麼您是否正在尋找自動完成功能,即在用戶鍵入或實際執行數據源上的索引搜索時在列表中查找元素?不同的東西。 – dotnetnate

+0

您使用的是數據庫嗎? – bfavaretto

回答

4

你正在做的事是被稱爲autocomplete(或者它是一個變體,你只是簡單地過濾列表),並且是一個非常常見的功能。

它要求您能夠快速查找數據,因爲您必須能夠在輸入形成時更新列表。當然,輸入可以按鍵輸入,有些人打字速度非常快。

如果你的列表包含在內存中,而且很小,那麼你最好的選擇可能會過濾列表中的搜索條件(我會參考這個框中鍵入的內容)。

如果您的列表未包含在內存中,那麼您需要以某種方式爲您的數據編制索引。一般來說,數據庫不適合這種事情。有些文本索引(SQL Server),如果這符合您的需要,您可以根據這個查詢。

如果您不使用數據庫,那麼您可能需要考慮使用Lucene.NET來索引您的內容。如果你的內容足夠小,我建議使用RAMDirectory,否則,標準FSDirectory(基於文件)將會很好。使用Lucene,你會想要使用Contrib.Shingles package(它可能包含在最新版本中,我不確定);這是一個n-gram過濾器,通過字符標記項目,所以基本上,您可以搜索前幾個字符(搜索標準)並獲得結果。

無論採取何種方法,您都需要考慮輸入速度。如果每次按下某個鍵時執行查找,您都會收到大量永遠不會發生的請求應用。

通常,您可能希望在搜索條件超出兩個字符後開始搜索。此外,請記錄所做的請求數量;如果您有一個返回的請求並提交了新的輸入,則取消舊的請求並提交新的請求,則不會使用舊請求中的值。

當涉及到UI組件時,最好讓其他組件供應商處理這個問題; WinForms具有用於TextBox的自動完成機制,Silverlight在Silverlight工具包中具有自動完成功能,jQuery具有用於網頁的自動完成機制。使用其中一種方法,並使用上述指導方針將數據轉換爲控件。

0

如果您在討論WinForms文本框,那麼您可以查看TextBox的AutomCompleteMode和AutoCompleteCustomSource屬性。