2009-08-14 134 views
0

我想添加簡單的全文搜索文本到我的web應用程序,它可以接受多個單詞進行搜索。
實例搜索條目: 「在線SQL書」全文搜索文本查詢

我應該把它轉換爲:

WHERE (CONTAINS(myColumn, '"Online*" and "sql*" and "books*"')) 
or : WHERE (CONTAINS(myColumn, '"Online* sql* books*"')) 
or maybe: WHERE (CONTAINS(myColumn, '"Online*"')) and (CONTAINS(myColumn, '"SQL*"')) and (CONTAINS(myColumn, '"books*"'))  

或者也許是更好地使用 'FORMSOF(INFLECTIONAL(' ...

另一個問題,其中第一種形式是好的(CONTAINS(myColumn,'Online *「和」sql *「)和」我的業務對象「中的內存存儲過程,然後將其傳遞給存儲過程?

回答

0

第一種形式很好書籍*「')) - 無論如何花了時間解析查詢。

第二個問題是方便的問題。如果你在sql2005中使用字符串操作,那就做吧。但記住在sql注入問題,所以檢查兩次。

+0

是的SQL注入是重要的,所以什麼會更安全,更快? – markiz 2009-08-14 12:06:49

+0

我認爲最好是在你的業務對象中構造它,而不是你的存儲過程,因爲你會在你的存儲過程中創建額外的開銷創建變量和連接值等(並且通常不是一個好習慣)。只要確保你sanatize的SQL字符串,以避免SQL注入Dewfy說。 – 2009-08-14 12:18:10

+0

@ Benjamin&Dewfy,我應該怎麼做(或不這樣做)來防止sql注入? – markiz 2009-08-14 12:40:19

1

使用SQL進行全文搜索的問題在於,它可能非常緩慢並且遺漏了您希望它成功的搜索。 SQL搜索也不會爲數據提供任何形式的排名,因此任何包含這些詞語的文本都可能會靠近頂端。

爲了解決這兩個問題,Lucene.net被創建爲允許簡單創建一個合適的詞條目索引。在這樣做的同時,它還可以看到特定條目中的詞彙使用頻率,並提供排名信息。您會發現它在使用SQL進行任務時顯着優於單個搜索的結果和執行速度,尤其是在擴展以支持更多搜索時。