回答
你在找什麼是word stemming。
你不能用一堆正則表達式來真正干擾像英語這樣的語言,但有太多例外。你需要一個大詞幹詞典。
PostgreSQL的全文搜索提供了這樣一本詞典,我強烈建議您使用全文搜索這個職位:
regress=# WITH vals(a,b) AS (VALUES ('goose','geese'), ('query','queries'), ('arrays','array'))
SELECT to_tsquery(a), to_tsvector(b), to_tsquery(a) @@ to_tsvector(b) FROM vals;
to_tsquery | to_tsvector | ?column?
------------+-------------+----------
'goos' | 'gees':1 | f
'queri' | 'queri':1 | t
'array' | 'array':1 | t
(3 rows)
雖然你會發現所產生的字典是不完美的;我希望搜索「鵝」來匹配「鵝」,但它沒有。您可能需要增強字典。 PostgreSQL的字典也可以是a bit over-enthusiastic about stemming at times。
另一種方法是使用更大,更容易定製的工具,如Apache Solr。
正是! PostgreSQL全文搜索比'LIKE'好,而且它已經內置了。嘗試一下,看看它如何適用於您的應用程序。如果效果很好,很好:你完成了,沒有額外的運動部件。如果沒有,部署Sphinx或Solr--無論是在搜索方面的能力還是坦率地更高,但使用單獨的搜索服務器會增加操作的複雜性。有時PostgreSQL是正確的選擇,有時候不是。 – willglynn
Class.all(:conditions => ["attribute LIKE ?", "array%"])
應該這樣做,我一直與梁2一會兒所以概率一個更好的方式,但會做的伎倆。
但是如果你搜索「鵝」會發生什麼?應該搜索「the」找到「詞庫」嗎? –
取決於你想如何設置它我猜,你可以在搜索查詢中使用singluarize和pluralize方法並返回兩者?你想要達到什麼目的? – cih
使用Postgres全文搜索時,可以修改字典here和here。
但是,由於mu太短,所以您可能更適合使用更高級的工具。我更喜歡Thinking Sphinx,這種事情。
不需要修改字典只是爲了處理複數。大量不同語言的標準詞幹詞典。 –
- 1. Oracle中複雜查詢的問題
- 2. 重複問題與查詢
- 3. 多重查詢的複雜SQL問題
- 4. 複雜的交叉表查詢問題
- 5. Oracle查詢重複的記錄問題
- 6. 複雜的SQL查詢問題
- 7. 複雜的SQL查詢問題
- 8. 複雜的MySQL查詢問題
- 9. LINQ查詢複雜的聯接問題
- 10. Extbase複雜的查詢問題
- 11. 複雜的MySQL查詢問題
- 12. 複雜的MySQL查詢問題
- 13. DataGrid中的數據重複。問題與LINQ查詢
- 14. SQL查詢中的計數問題
- 15. Perl中的Mysql查詢參數問題
- 16. SQL查詢中的問題
- 17. MySQLi查詢中的問題
- 18. mongodb中的查詢問題
- 19. Mysql查詢中的問題
- 20. Yii中的查詢問題
- 21. 查詢中的Django問題
- 22. 數據庫查詢問題
- 23. MySQL查詢,計數問題
- 24. 參數化查詢問題
- 25. MySQL查詢計數問題
- 26. 數據庫查詢問題
- 27. 問題查詢數據庫
- 28. 媒體查詢修復問題
- 29. MS Access查詢複雜問題
- 30. 問題的查詢
你可能用全文檢索系統更好。 –