2013-02-19 40 views
3

在我們的新網站(購物網站)上,我們將使用Solr作爲我們網站的搜索引擎。在Solr索引中,我們保留了產品ID的列表以及每個產品的關鍵字列表。搜索查詢是針對關鍵字完成的。將Solr結果與MySQL數據結合的最有效方式

Solr返回產品ID列表。然後將這些ID插入到MySQL查詢中,以從數據庫中選擇所有產品數據。 MySQL也處理結果的排序。例如,MySQL查詢可能如下所示:

SELECT * FROM product WHERE id IN (1,4,42,32,46,...,39482) ORDER BY price ASC 

我們網站上有大約10萬種產品。當有幾千個結果時,此方法正常工作,但當有 - 例如 - 50,000個結果時,該方法變得很慢。

我的假設是瓶頸是「WHERE IN」子句。一個長期的解決方案是將所有產品數據移動到Solr,以便它可以處理結果的排序,並將精煉過濾器應用於搜索(例如,用戶可能只想查看某個價格範圍內的產品)。但是,我們對Solr並不熟悉,需要短期修復才能實施。

一種選擇是在短期內放棄Solr並將關鍵字存儲在MySQL的表中,然後使用FULL-TEXT搜索對此進行搜索。

我是否缺少其他選擇?

+0

你能創建一個'VIEW'? – Kermit 2013-02-19 14:35:15

+0

不是從select語句創建的VIEW嗎?我不知道如何使用Solr查詢的結果來創建視圖。 Solr返回一個產品ID的數組。 – Andrew 2013-02-19 14:45:21

回答

6

您面臨的主要問題是Solr將返回按匹配關鍵字數排序的結果,但您希望結果按價格排序。就像你正確地提到的那樣,把所有的數據移到Solr是最好的選擇 - 你會很滿意Solr的搜索,排序,刻面和分頁需求。

對於短期而言,僅需將price字段添加到Solr將非常有價值。當你得到一個搜索查詢像tooth paste可以發出Solr的查詢像

q=keywords:(tooth AND paste)&rows=10&fl=id&sort=price%20asc 

只得到前10個結果,然後通過指定start參數進行分頁,所以像:

q=keywords:(tooth AND paste)&rows=10&start=10&fl=id&sort=price%20asc 
+0

是的,這是一個好主意。謝謝。 – Andrew 2013-02-19 16:48:27

+0

抱歉 - 現在完成:) – Andrew 2013-02-20 09:03:39

+0

您可以在SOLR中使用全文搜索將字段類型更改爲模式中的' .XML – 2016-01-21 07:55:37

相關問題