2011-09-29 75 views
0

我想向Solr發送一個字符串,讓它回答所有屬於該字符串子集的記錄。基於字符串字段子集的Solr查詢

我要發送的字符串是用空格分隔的整數。我想讓solr給我所有記錄,其中特定的字符串字段是我作爲請求字符串提供的數字的子集。

一個例子...

想象我在Solr的索引的字符串字段,它實際上是一組用空格隔開的整數。舉例來說,假設我有以下記錄的字段建立索引中的Solr:

  • 「888110」
  • 「888110 888120」
  • 「888110 888120 888130」
  • 「888110 888120 888130 888140」
  • 「888110 888130 888140」
  • 「888110 888140」
  • 「888140」
  • 「888120 888130」

我想Solr的接收與查詢,例如 「888110 888140」,並與以下記錄回覆:

  • 「888110」
  • 「888110 888140」
  • 「888140 「

如果我通過查詢 」888110 888120 888130「 檢索到的記錄會...

  • 「888110」
  • 「888110 888120」
  • 「888110 888120 888130」
  • 「888120 888130」

所檢索的記錄必須以字符串形式提供的數字恰好一個子集。

是否有可能使Solr的行爲像這樣?

回答

0

我有點困惑爲什麼在第一個例子「888110」沒有返回,但它是在第二個例子。不管怎麼說,如果我大致瞭解你正在嘗試做什麼,我會創建一個新字段multi valued並在查詢中使用布爾運算符(AND,OR)。

在架構

 <field name="code_string" ... /> 
     <field name="codes" ... multiValued="true"/> 

所以你必須像

<doc> 
    <arr name="codes"> 
     <str>811001</str> 
     <str>811002</str> 
    </arr> 

,並在查詢

?=codes=811001 OR codes=811002 OR .... 

在我使用Solr經驗的文件一般是清潔/更可維護以犧牲一點記憶,而不是創造衰弱複雜的濾波器鏈等

+0

這是正確的,「888110」應該是第一個例子的結果。我的錯。 您的查詢似乎並不滿足所提出的要求。在第一個示例中,您的查詢將返回除最後一個之外的所有記錄。查詢的第二個例子將返回所有記錄。 我想Solr的什麼回報是,在請求的NUM時代的一個子集的所有記錄。如果記錄中有一個不在請求中的號碼,則不應該返回此記錄。這就是爲什麼我需要關於子集的鏈接[link](http://en.wikipedia.org/wiki/Subset)。 任何新的ideia? – MCF

+0

兩點:1)似乎是你想要的輸出和指定行爲中的一些矛盾。你引用'如果記錄有一個不在請求中的數字,這個記錄就不應該被返回。'通過這個基本原理的例子1結果2是與這個邏輯相矛盾的。 2)我的查詢格式將返回除第二個例子之外的所有內容,而不是全部。 – markdsievers

+0

沒錯,對不起。我剛剛糾正了這些例子。 – MCF