2017-01-31 24 views
0

いくつかの背景:製品、アイテム、および:SolrにはChildDocTransformerFactoryとネストされた文書を照会、「親フィルタにマッチしていない親のクエリ利回りの文書」を取得

  • 関わるデータは3つのネストされたオブジェクトで、カタログデータでありますSkus、その順に。各レコードには、差別化要因としてdocTypeフィールドがあります。
  • データの "id"フィールドはデータ型内で一意ですが、データ型間では一意ではありません。私たちのプログラムには、P12345のように、docTypeの最初の文字が前に付いたIDであるSolrインポートファイルを生成する "uuid"フィールドが追加されました。これはuuidフィールドを一意にし、私たちはschema.xmlのuniqueKeyとしてそれを持っています。
  • 親製品とすべての子ドキュメントを取得しようとしています。このように、私たちはChildDocTransformerFactory([child ...])を使って子を親と一緒に取得しています。私たちはSKU内のアイテムを結果にネストされたドキュメントとして取得する問題をまだ解決していませんでしたが、その時点でそれを理解する必要がありますが、現在はそれらをフラットにします。
  • この。これはすべて新しい仕事なので、自由に変更することができます。
  • これはSolrの6.0.0であり、我々はJSON形式でインポートしている、それは

を重要ならば我々のデータは、この(私は簡単にするためにいくつかのフィールドを削除した)のようになります。

{ 
    "id": 739063, 
    "docType": "Product", 
    "uuid": "P739063", 
    "_childDocuments_": [ 
    { 
     "id": 1537378, 
     "price": 25.45, 
     "color": "Blush", 
     "docType": "Item", 
     "productId": 739063, 
     "uuid": "I1537378", 
     "_childDocuments_": [ 
     { 
      "id": 12799578, 
      "size": "10", 
      "width": "W", 
      "docType": "Sku", 
      "itemId": 1537378, 
      "uuid": "S12799578" 
     } 
     ] 
    } 
} 

すべての製品とその中にネストされた子をフェッチするためのクエリは、q = docType:Product & fl = title、id、docType、[child parentFilter = docType:Product]です。そのクエリを実行すると、すべてが正常で、最初の10行が返されます。ただし、&行= 500と追加してさらに行をフェッチすると、エラーが返されます。親クエリは親フィルタdocID = XXXと一致しないドキュメントを生成します。

最初にこのエラーが発生したとき、私たちのidフィールドがドキュメントタイプ間で一意ではないことがわかったので、上記のようにuuidフィールドを追加しました。 schema.xmlファイルにを追加し、コアを拭き取り、再作成して、Solrを再起動して、それが有効であることを確認しました。我々は二重チェックして、UUIDフィールドが一意であることを確認しています。

私が見つけたそのエラーのすべての検索結果では、OPにはさまざまな種類の文書を区別できるフィールドがありませんでしたが、わかりました。クエリとparentFilterの両方がを検索しているので、docType:Product私は親以外のものを返す可能性があります。 childFilter = docType:ItemとchildFilter = docType:Skuを追加しようとしましたが、それは助けになりませんでした。商品にはタイトルしか付いていないので、クエリ用にtitle:*とparentFilterを使ってみました。

他にも何かお試しいただけますか?

この説明はありませんか?

uuidがschema.xmlに指定されていても一意の識別子として使用していない可能性はありますか?

ありがとうございました。

答えて

0

solrconfigのため、schema.xmlを使用していないことが判明しました。xmlは管理対象スキーマ用に構成されています。おっとっと。

ドキュメントの多くは、スキーマレスを使用していることを前提としていますが、詳細には触れていないので、私はそれを逃しました。

関連する問題