2009-12-14 107 views
1

我想讓我的主題內容可以通過全文搜索引擎(如solr)進行搜索。數據庫搜索引擎(solr/sphinx)

我不知道一件事,我應該只索引thread.title,thread.body和post.body,還是應該索引屬於線程的用戶名,創建日期,帖子,視圖,國家,地區和城市的編號?

我的意思是,當用戶搜索一個線程時,他們將返回包含線程標題,正文的兩行,用戶發佈它,創建日期,標籤等的命中。

我是否應該索引所有這些信息?但是,那麼它將幾乎是整個數據庫,或者我應該索引我提到的全文搜索的第3列?

另一個問題:當用戶發佈一個新的線程,那麼我必須立即告訴solr添加該行?如果我不是,它將如何搜索?

+1

只*您*知道*您的應用程序需要搜索哪種信息。這就像問你應該在關係數據庫中存儲什麼類型的信息。 – 2009-12-15 03:14:30

+0

請針對不同的問題創建單獨的問題。不要把所有的問題都放在同一個問題上。 – 2009-12-15 03:15:08

回答

3

我已經使用Apache Lucene,但我還沒有使用過Apache Solr。所以我推斷了這個答案。但是,Lucene索引是Solr的力量,所以我認爲它幾乎相同。

我會添加您可能希望作爲可搜索內容的一部分或作爲搜索結果返回的所有內容。

請注意,Lucene允許您將字段添加到文檔中作爲「未分析」 - 這意味着這些字段不是可搜索內容的一部分。但是當您執行搜索並且它找到該文檔時,會返回額外的字段。另一種方法是僅包含主鍵,然後在找到匹配的文檔後,必須使用該鍵進行SQL查找。

Lucene還支持針對索引中特定字段的查詢。所以你可以在索引中包含所有的字段,但是如果你想讓一個給定的搜索僅匹配一部分字段,你可以這樣做。

最後,是的,你必須保持Lucene/Solr索引與數據庫中的數據保持同步。您可以使用DataImportHandler幫助將批量數據從RDBMS加載到Solr服務器。或者,您可以使用Solr的類似REST的HTTP接口發佈單個文檔,以便在創建新線程時實時索引它們。

+0

thx回答如此徹底。如果我使用SQL,那麼查看其他所有內容,然後我必須在PHP中運行它。然後我不能只使用jquery和solr。我必須使用jquery ajax將變量發送到php,然後php聯繫solr,獲取信息,然後執行sql查找,然後將其返回給jquery。這聽起來像更多的編碼,而不僅僅是直接通過jquery獲取solr數據。所以我應該索引一切,就像你說的一樣,其餘的不可搜索。我用什麼命令發送查詢字符串並從solr中獲取數據? – ajsie 2009-12-14 23:05:28

+0

由於Solr具有REST接口,因此可以使用PHP的curl擴展來創建請求:http://php.net/curl – 2009-12-15 01:01:23