2016-04-13 11 views
2

私はSolr 5.4.0を使用しています。私は、ネストされた文書で、いくつかの単純なデータをインポートしました:子ドキュメントのフィルタリング時にSolrが不正な結果を返す

<doc> 
    <field name="id">d1</field> 
    <field name="content_type">parent_document</field> 
    <doc> 
    <field name="id">d2</field> 
    <field name="content_type">related_parent</field> 
    </doc> 
</doc> 
<doc> 
    <field name="id">d3</field> 
    <field name="content_type">parent</field> 
    <doc> 
    <field name="id">d4</field> 
    <field name="content_type">related_parent</field> 
    </doc> 
</doc> 
<doc> 
    <field name="id">d5</field> 
    <field name="content_type">parent</field> 
    <doc> 
    <field name="id">d2</field> 
    <field name="content_type">related_parent</field> 
    </doc> 
</doc> 

フィールドの定義は以下のとおりです。

<field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/> 
<field name="content_type" type="lowercase" omitTermFreqAndPositions="true" multiValued="false" indexed="true" required="true" stored="true"/> 

<fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100"> 
<analyzer> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 

は、私が子供の文書としてD2を持っているすべての文書を見つける必要があります。 私は、クエリ使用:

q={!parent which=content_type:parent}id:d2 

を私は、結果としてD5を期待するが、代わりに私が手:

"response": { 
    "numFound": 1, 
    "start": 0, 
    "docs": [ 
    { 
     "id": "d3", 
     "content_type": "parent", 
     "_version_": 1531507509621162000, 
     "_root_": "d3" 
    }, 
    { 
     "id": "d5", 
     "content_type": "parent", 
     "_version_": 1531507848756854800, 
     "_root_": "d5" 
    } 
    ] 
} 

D3は、ここで返されるのはなぜ? d3をフィルタリングするためにこのクエリにどのような条件を追加する必要がありますか?私はここで起こって二つのものを参照することができます

+0

あなたはそれが起こった理由を知りましたか?私は6.6でも似たようなことを見ましたが、私たちの場合、私たちはバイブラのキャプチャを行い、すべてが正しいと見ましたが、少なくとも100のドキュメントのうちの1つがこの問題の影響を受けました。 – eglasius

答えて

0

https://stackoverflow.com/a/31952527/3229995に私の答えのように

  1. を、フィールド「CONTENT_TYPE」は、親文書に存在しなければなりません。以前のSolrバージョンでは、子ドキュメントの他の値と一緒に "content_type"フィールドを持っていて、この問題が現在のバージョンで解決されているかどうかわかりませんでした。

  2. データセットにid = "d2"の2つのドキュメントがあります。 Solrでは、各ドキュメントに一意の識別子があり、デフォルトではこれがidフィールドです。あなたのコレクションには、同じ一意の識別子を持つ2つのドキュメントはありません。

ブロック結合クエリパーサーが正しく動作するように、両方の点を変更することをお勧めします。

+1

ad 2、はい、私のコード例でフィールド名を変更しました。実際のデータでは、フィールドには別の名前があるため、エラーの原因ではありません。 –

+0

1の場合、例の親ドキュメントに「content_type」フィールドを追加するだけです。それはその後動作しますか? – tkja

関連する問題