2012-04-10 87 views
2

在Solr中,查詢跨每個字段的每個查詢具有不同權重的不同字段查詢的最佳方式是什麼?在Solr中使用不同的提升查詢多個字段

我們使用C#和ASP.NET,使用SolrNet來查詢Solr。我們的指數看起來有點像這樣:

  • DOCUMENT_ID
  • 標題
  • TEXT_CONTENT
  • 標籤
  • [更多領域...]

這是再使用關鍵字查詢,其中每個關鍵字的權重不同。因此,例如,「ipad」可能具有40的權重,但「android」可能具有權重25.

與此相關,每個字段具有不同的基本權重。例如,關鍵字比頁面標題更有價值,它比文本內容更有價值。

所以,我們最終像下面這樣:

  • 標題^ 25個
  • TEXT_CONTENT^10
  • 標籤^ 50

與以下關鍵詞:

  • ipad^25
  • 蘋果^ 22
  • 微軟^ 15
  • 窗口^ 15
  • 軟件^ 20
  • 計算機^ 18

所以,每個搜索查詢具有不同的加權,並且每個場具有不同的重量。其結果是,我們最終得到的搜索條件如下:

  • 標題:ipad的^ 50
  • 標題:蘋果^ 47
  • 標題:微軟^ 40
  • [更多冠軍。 ]
  • TEXT_CONTENT:ipad公司^ 35
  • TEXT_CONTENT:蘋果^ 32
  • TEXT_CONTENT:微軟^ 25
  • [其它更多...]

這會轉化爲非常非常長的搜索查詢,該搜索查詢超出了允許的限制。這似乎是一種非常低效的做事方式,我想知道是否有更好的方法來實現這一點。

實際上,我們列出了具有不同權重的關鍵字列表,以及Solr中也有不同權重的字段列表,其思路是查詢索引以檢索最相關的文檔。

使這個問題更復雜化,雖然它可能超出了這個問題的範圍,但查詢還包括過濾器來過濾掉文檔。這是使用以下類型的查詢完成:

&fq=(-document_id:4f845eb321c90b0aec5ee0eb)&fq=(-document_id:4f845cd421c90b0aec5ee041)&fq=(-document_id:4f845cea21c90b0aec5ee049)&fq=(-document_id:4f845cf821c90b0aec5ee04d)&fq=(-document_id:4f845d0e21c90b0aec5ee056)&fq=(-document_id:4f845d3521c90b0aec5ee064)&fq=(-document_id:4f845d3921c90b0aec5ee065)&fq=(-document_id:4f845d4921c90b0aec5ee06b)&fq=(-document_id:4f845d7521c90b0aec5ee07b)&fq=(-document_id:4f845d9021c90b0aec5ee084)&fq=(-document_id:4f845dac21c90b0aec5ee08e)&fq=(-document_id:4f845dbc21c90b0aec5ee093)

這些也可以有很多的字符添加到搜索查詢,如果也有一個更好的方式來處理這個問題,以及這將是一件好事。

任何幫助或建議是最感謝。謝謝。

回答

2

我會建議將這些默認參數添加到solrconfig.xml內的請求處理程序配置中。他們總是一樣的,對嗎?

<requestHandler name="standard" class="solr.SearchHandler" default="true"> 
    <lst name="defaults"> 
     <str name="defType">edismax</str> 
     <str name="qf">title^25 text_content^10 tags^50</str> 
    </lst> 
</requestHandler> 

您應該能夠添加靜態過濾器等,使您不必指定這些值,除非你想要做的事不同於默認設置,使用URL短了很多結束了。

+0

想過這個問題,雖然增強功能也會根據搜索條件而改變,所以我不確定默認增強值的價值有多大。例如,標題可以有*基數* 25的提升,但是隨後每個搜索詞的提升將被添加到此,以創建類似這樣的內容 - title:foo^35 title:bar^40 title:foobar^30 。 – Mun 2012-04-11 18:47:16