2017-09-14 33 views
0

SOLRにいくつかのネストされたデータがあります。SOLRの子ドキュメントから特定のフィールドをフィルタする方法

{ 
    "name":["Abc"], 
    "age":[30], 
    "hobby":["singing"], 
    "_childDocuments_":[ 
    { 
     "college":["xyz"], 
     "year":[2015], 
     "id":"3752-22491", 
     "3.c.m.c-id":["256939"], 
     "2.c.m-id":["354291"], 
     "path":["3.c.m.ci"]}, 
    { 
     "subject":["history","science"], 
     "marks-1":[75], 
     "marks-2":[75], 
     "id":"3752-802126", 
     "2.c.m-id":["354291"], 
     "path":["2.c.m"]} 
    ]} 

私はSolrのからのみマーク-1マーク-2を取得することはないです。私が検索すると、私は全体のデータを応答として見つけます。私はこれらの2つのフィールドだけを取得するための助けが必要です。

ご協力ありがとうございます。

+0

あなたの現在のクエリを示すことができましたか? – Mysterion

+0

私はこのクエリを使用しています(http:// localhost:8983/solr/test/select?indent = on&highlight = true&start = 0&rows = 10&wt = json&hl = true&hl.method = unified&fl = *、[child parentFilter = path:1.c childFilter = "パス:* .c。*" "limit = 50"&q = name:Abc ) – Learner

答えて

0

、それがどのフィールド返すために、子文書のではなく、表示するために子ドキュメントをフィルタリングする目的がありますので、あなたは、ChildDocTransformerでそれを行うことができませんでした。

また、子ドキュメントのフィールドを制限することでパフォーマンスの向上が得られないため、クライアント内またはレスポンスの変換中にこれらのフィールドをフィルタリングする方が簡単になることは間違いありません。

solr/collection_name/select?fl=id,title_t,stars:[subquery] //enter mode for subquery 
&indent=on 
&q=title_t:* // this is the general query, here, just selecting book 
&stars.fl=stars_i // which fields from the child documents to return 
&stars.q={!prefix f=id v=$row.id} // subquery that you need to adapt 

私はこのhereから冊/レビューの収集にクエリし、それが働いた:あなたはまだやりたい場合は

しかし、Solrのクエリを経由して、あなたはこのようなものでsubquery transformerを使用する必要があることちょうど良い。ただし、サブクエリを変更する必要があります。ここでの問題は、親文書に対応する特定の子文書のみを選択する必要があることです。 parent_idのようなものかもしれません(データにこの情報が表示されないので、必要になります)。

なぜそれが必要ですか?それ以外の場合は、親文書のそれぞれにALL子文書の下にサブクエリで選択する子文書が含まれます。私の例では、子ドキュメントのIDが親ドキュメントのIDで構成されているため、プレフィックスクエリを使用しています。例えば。

id:book1 

と、子IDは以下のとおりです。

id:book1_r1 
関連する問題