2011-06-14 27 views
1

我剛開始探索SolrNet。以前我一直在使用MSSQL FULL TEXT。SolrNet新手 - 如何處理多個Where子句

在SQL Server中,我的查詢做全文搜索,也有多個連接和WHERE子句。我也使用自定義分頁來返回數以百萬計的10行。

我看了幾solrNet文檔和設置在該博客上運行示例應用程序。迄今爲止所有的工作都很好只需要得到一個想法,我怎麼處理JOINS和WHERE子句?

例如如果三星用戶搜索,數據庫將返回100K記錄,但如果三星& &城市=「紐約」 & &價格>用戶搜索「500」然後他就只能得到幾十萬條記錄。

  • 我是否在Solr中添加所有列並在Solr中寫入WHERE子句?
  • 我該如何處理SQL JOINS?

先謝謝了!

回答

1

Solr沒有加入。來自Solr wiki

Solr提供了一張表。在索引存儲一組 數據庫表通常需要 一些反規範化所述 表。嘗試避免 反常化通常會失敗。

關於WHERE子句(即濾波),見Querying in SolrNetSolr query syntax,和Common Solr query parameters

+0

感謝Mauricio的提示。 – 2011-06-14 22:46:45

+0

只是幾個問題,如果你可以用你的SolrNet經驗指導我。 1)如果我在查詢中有近5個過濾器,它會減慢Solr中全文搜索的速度。其次,我已經在我的MS SQL數據庫中實現了近似搜索,它根據緯度和經度制定了最近的位置ID。 Wat是用Solr完成這件事的最好方法。即我應該在向Solr發送查詢之前制定最近的位置名稱。然後在Solr中使用一些東西(相當於SQL IN操作符)以匹配所有這些位置名稱? – 2011-06-14 23:26:07

+0

@Peter:1.取決於這些過濾器是什麼,但典型的過濾器不明顯。 2.見http://wiki.apache.org/solr/SpatialSearch – 2011-06-14 23:49:22

1

Solr的相當於你的WHERE子句的情況是將列映射到字段並運行基於查詢語法查詢。像你的榜樣查詢:

Samsung && City='New york' && Price >'500' 

可以轉換爲這樣的事情在Solr的:

q=Samsung AND city:"new york" AND price:[500 TO *] 

你需要的時候,你的數據庫映射到Solr模式採取一些照顧,特別是你大概會必須使數據非規範化。有關更多信息,請參閱this page on the Solr wiki。基本上,你不能真正在Solr中做複雜的JOIN。這是一個「單位」指數。

+0

感謝hross。它幫助! – 2011-06-15 00:04:54