我目前正在開發一個AppEngine項目,並且我想實現搜索術語的自動完成。 項目可以搜索的是合理的明確和簡短,所以我想通過給每個項目列表的不完整類型來實現它。所以foobar
會得到像[f, fo, foo, foob, fooba, foobar]
這樣的列表。然後將搜索框中的用戶文本與該列表進行比較,並建議使用正匹配。如何格式化搜索自動完成零件列表?
有一對夫婦在此列表中可能的優化,我在想:
- 從搜索詞去掉空格標點符號。
Foo. Bar
至FooBar
。 - 刪除大寫字母
- 刪除「the」,「a」,「an」等前導粒子。
The Guy
將是guy
,並索引爲[g, gu, guy]
。 - 只能將長度大於2或3的子字符串添加到索引列表中。因此
The Guy
將被索引爲[gu, guy]
。我認爲只有與第一封信相匹配的建議纔不那麼重要。
用戶搜索詞也將以這種方式格式化,之後搜索數據庫。在建議搜索詞時,根據建議對象的全名添加粒子,標點符號和大寫字母。所以尋找「the」不會有任何建議,但尋找「The Gu ..」或「gu」會提示「The Guy」。
這是個好主意嗎?主要是:這種格式的幫助,還是隻會造成麻煩?
將空格上的單詞分開有用嗎?當用戶在搜索框中輸入_both_字時,如何匹配字符串?你需要爲每個單詞做一個單獨的數據庫查詢嗎?像'開始時的詞1 +開始時的詞2 +詞3等'# – noio 2010-01-19 22:23:45
不,實際上,您可以爲每個單詞級聯一個過濾器:'query.filter('start'='word1')。filter('start =' ,'word2')....' – jbochi 2010-01-19 23:19:12