簡體   English   中英

從Solr查詢的結果中排除字詞

[英]excluding term from results in solr query

我是新來的solr。 我對使用q還是fq感到困惑。 假設我有一些領域

  • 狀態(可能的值:喀拉拉邦,德里,西孟加拉等)
  • 標題
  • processed_title
  • 描述
  • 等等

有索引的Fileds是statetitleprocessed_titledescription

我想要結果

boiler keyword (all matches) in state delhi and also boiler keyword (exclude repair) in kerala

我認為一個解決方案

q=((boiler AND state:delhi) OR (boiler AND -repair AND state:kerala))

其他解決方案可能是

q=boiler&fq=(state:gujarat OR (state:kerala AND -processed_title:repair -title:repair -description:repair))

我必須在python中編寫json interafe進行查詢。 JSON可能看起來像(下面的字典只是一個例子)

{ q: 'boiler', filter: { state: kerala, price: [10 TO 100] } }我的問題是:

  1. 是否可以用qfq更好地同時使用qfq來編寫所有內容?是否有任何方法?
  2. 如果我想編寫一個json接口api,這將是創建查詢1或2的簡便方法,還是有更好的解決方案?

我正在使用solr 4.10。

謝謝

最好同時使用q和fq。 您將用於過濾文檔的內容放入fq中(結果是二進制的,文檔是輸入還是輸出),然后輸入q您要搜索的內容(這是漸進的,一個文檔可以匹配所有關鍵字,而另一個則可以匹配所有關鍵字一個僅匹配一個。如果可以將所有內容都放在fq中,則這樣做,q = *:*完全可以)。

不同之處在於:

  • fq不會影響得分,只是過濾掉文檔。 q影響分數
  • fq被緩存(除非您要求不被緩存),因此,作為初始代價的交換,使用相同fq的下一個查詢將更快。 這是最大的交易。

關於json api問題,我不太了解您的意思。

一個好的經驗法則是,如果您的字段具有一組固定的值,請使用fq。 在您的情況下,狀態應為fq。 q用於計算solr分數。 分數越高意味着比賽越好。 您可以在這里閱讀更多內容。

fq不用於計算分數。 SOLR中的文檔要么具有喀拉拉邦狀態,要么沒有。

假設您的系統中有三個文檔。

doc1: {'title':'idli idli idli','state':['kerala','karnataka']}
doc2: {'title':'idli','state':['kerala']}
doc3: {'title':'paneer','state':['punjab']}

查詢idli和狀態喀拉拉邦,您將使用

q=idli&fq=kerala

這有點簡單,但是Solr將為doc1返回更高的分數,因為它比單詞doc2具有更多的單詞idli實例。 fq不會(也不應該)影響得分。 一個州有idli或沒有

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM