2010-03-30 96 views
1

我正在創建一個搜索頁面,我們可以通過輸入文本找到該產品。算法搜索頁面

ex:在夜晚帶來。

我的查詢將帶來至少包含這個詞的記錄。

需要: 1.第一行應該包含給定句子的記錄。 2.第二行最匹配。 3.第三行下一個匹配...等

如何實現這一點。有沒有任何算法。如果有人分享你的想法,這將會更有幫助。

編輯:

樣品搜索順序:

1. Brings on the night 
2. Whoever Brings the Night 
3. Night Baseball Brings 
4. Night ride 
5. Night Round 
6. Brings flower 

格塔

+0

只要您完全定義術語'匹配',我們將能夠引導您完整的解決方案。從你寫的東西我可以假設它是某種函數返回排序值。 – Unreason 2010-03-30 08:47:33

回答

1

建立一個搜索引擎是一個非常複雜的工作,涉及模糊性,人類的語言,錯別字,以及更多。您應該嘗試使用隨數據庫引擎提供的任何內容。 SQL Server和SQLite開箱即用,大多數其他數據庫可能具有類似的功能。這些引擎不是特別好,但它們應該足以應付簡單的情況。對於更嚴肅的工作,請嘗試使用Lucene,它針對不同的編程語言提供各種風格。

0

作爲一個非常簡單的解決方案,您可以使用sql的LIKE運算符。取而代之的

從table_name的地方參數選擇OBJECT_NAME =東西

你會做

選擇OBJECT_NAME從table_name的地方參數喜歡的東西

這可能會非常努力簡單場景

+0

我正在做點什麼。但我沒有得到正確的順序。 – Geeth 2010-03-30 06:01:44

+0

你可以使用ORDER BY - http://www.1keydata.com/sql/sqlorderby.html – Ankur 2010-03-30 06:19:55

+0

好吧,我明白你的意思。那麼這是一個非常簡單的解決方案。如果你想讓它們有序,那麼你需要定義一些「匹配性」的措施,讓m是x和y匹配的程度。這並不簡單,我不認爲我可以通過這個文本框給你一個答案。如果你真的想要這個工作,你應該按照Marcelo推薦的方法研究Lucene – Ankur 2010-03-30 06:22:18

0

一些指針
- 試試你的RDBMS全文檢索或調查解決方案,如Lucene的/ Solr
- 也有distance (Levenshtein)實現在SQL,不那麼微不足道手工製作的排名
- n-grams (bigrams, trigrams)可以做很多,例如見postgres內部搜索相比mysql或MSSQL的所有選項

內部RDBMS搜索(postgres可能是一個例外)通常選項太少,實現你自己的通常太難了,或者RDBMS不會讓你這麼做(高效)。

0

在Java中,你有Lucene

也有在PHP的一個端口(Zend的Lucene的)。

你也有一個端口到C#Lucene .NET

只是通過改變你的數據庫模型,你可以將它集成到搜索引擎。

看一看。我過去使用過Lucene,它一直非常有效。