2011-09-29 17 views
0

文字列をSolrに送信し、その文字列のサブセットであるすべてのレコードで応答させたいと思います。文字列フィールドのサブセットに基づくSolrクエリ

私が送る文字列は、スペースで区切られた整数です。私は、特定の文字列フィールドがリクエスト文字列として提供される数字のサブセットであるすべてのレコードをsolrに渡したいと思っています。

例...

は、私が実際にスペースで区切られた整数の集合であるSolrの中でインデックス化文字列フィールドを持っている想像してみてください。

  • 「888110」
  • 「888110 888120」
  • "888110 888120 888130"
  • "888110 888120 888130 888140"
  • :exampleについて、'sはIがfollowing record's fieldがSolrにindexed have say let
  • "888110 888130 888140"
  • "888110 888140"
  • "888140"
  • "888120 888130"

私は "888140 888110"、例えば、でクエリを受け取るためのSolrをしたいし、次のレコードを返信:

  • "888110"
  • "888110 888140"
  • 「888140 「

私がで問い合わせる場合は "888110 888120 888130" 取得したレコードが...

だろう0
  • "888110"
  • "888110 888120"
  • "888110 888120 888130"
  • "888120 888130"

取得されたレコードは、正確に文字列として指定数のサブセットである必要があります。

Solrをこのように動作させることはできますか?

答えて

0

最初の例では「888110」は返されませんが、2番目の例では混乱しています。

とにかく、あなたがしようとしていることを一般的に理解していれば、私は新しいフィールドmulti valuedを作成し、クエリにブール演算子(AND、OR)を使用します。

例えばスキーマ

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

にあなたはSolrのと私の経験で

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

とクエリで

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

のような文書を持っていることは、一般的に/クリーナーです衰弱して複雑な一連のフィルタなどを作るのではなく、少しのメモリを犠牲にして維持することができる。

+0

最初の例の結果に「888110」を入れる必要があります。私のせい。 クエリが提案された要件を満たしていないようです。最初の例では、クエリは最後のレコードを除くすべてのレコードを返します。 2つ目の例の1つは、すべてのレコードを返すクエリです。 私がsolrを返すことを望むのは、リクエスト中のnumのサブセットであるすべてのレコードです。レコードに要求に含まれていない番号がある場合、このレコードは返されません。それが私がサブセット[link](http://en.wikipedia.org/wiki/Subset)についての必要条件です。 新しいideiaはありますか? – MCF

+0

2点:1)希望の出力と指定された動作にいくつかの矛盾があるようです。 「レコードに要求に含まれていない番号がある場合、このレコードを返すべきではない」と引用します。この論理的な例1の結果2は、その論理との矛盾です。 2)私のクエリフォーマットは、すべてではなく、例2の最後のエントリから2番目のエントリまでを返します。 – markdsievers

+0

そうです、申し訳ありません。私は例を修正しました。 – MCF

関連する問題