2017-04-07 126 views
0

我是Solr的新手,並且有一項任務來阻止所有搜索查詢的結果中的某些文檔。從Solr的所有搜索結果中排除特定文檔?

我搜索,發現幾種方法可以阻止結果。

  1. elevate.xmlhttps://wiki.apache.org/solr/QueryElevationComponent
  2. 使用 「excludeIds」 參數在查詢(http://localhost:8983/solr/elevate?q= & elevatedIds = doc3的,DOC4 & excludeIds =文檔6,doc8)
  3. 使用以下內容:

<lst name="appends"> 
 
    <str name="excludeIds">doc_id_1,doc_id_2</str> 
 
</lst>

但上述所有3種解決方案都存在限制。

  1. elevate.xml僅適用於靜態關鍵字/搜索,因此它不適用於所有搜索。

  2. 在查詢中附加exculdeIds會增加Java代碼中Post請求的長度。

  3. 更新solrconfig.xml以追加exculdeIds會給出預期的結果,但是我們必須每次重新啓動Solr時,我們需要阻止的Id列表發生更改。

那麼有沒有辦法在所有搜索中動態阻止Solr中的文檔ID列表?

回答

0

的另一個回答您的問題將添加一個新的領域和存儲的「狀態」(顯示或不應該)存在和使用,在Solr的篩選查詢。 例如有一個字符串字段名稱爲「刪除」和不應該在結果中顯示的文件,添加「刪除」字段值是「真」。 所以,你可以查詢像 「Q = ABC & FQ = -remove:真正的」

注:

  1. 這在長遠來看,多使用。如果文檔需要在其他查詢中顯示,則可以刪除fq過濾器。
  2. 您可以添加任意數量的文檔以使字段「remove = true」,並且不會對搜索查詢進行任何更改。該文件不會顯示在結果中。
  3. 您也可以在「solrconfig」中添加此過濾器,因爲不需要每次都更改它。
+0

他說ID會動態變化,所以這不會工作?無論是我還是誤解了這個問題。我認爲ID會隨着每個請求而改變 – Persimmonium

+0

@Persimmonium每當「ID」改變時,相應的「刪除」字段的文件需要更新爲「真」。然後文檔將不會自動顯示在結果中。 – Riya

+0

這是否意味着每當更改Ids列表時,我需要在Solr中重新重新索引整個數據?或者有沒有辦法更新Solr中文檔的字段? –

0

那麼,你可以約束隨時添加到所以這些文檔不返回查詢:

q=abc&fq=id:[* TO *] -id:(doc_id_1 doc_id_2) 

通過上面的FQ,您排除doc_id_1和_2。如果設置的文檔,以排除會在一段時間後,在另一個查詢重複,離開它像(FQ的將Solr的緩存),如果不是曾經打算重複,免得被用

緩存
q=abc&fq={!cache=false}id:[* TO *] -id:(doc_id_1 doc_id_2) 

編輯:我瞭解ID將隨每個請求而改變。如果不是這種情況,那麼當然你可以把fq放在處理程序定義中,或者像其他答案所說的那樣添加一個特定的字段。

+0

fq似乎是正確的答案。 OP:可以將fq參數直接放入搜索處理程序中,因此運行查詢的客戶端不必知道它就在那裏,並且它將應用於所有客戶端。 –

+0

但是如果我有(比如說)需要被封鎖的50K ID,這會對響應時間產生影響嗎?因爲我們需要發送所有這些50k ID以及每個查詢 –