2016-04-13 60 views
2

Benim örneğimde Solr 4.10.3 İç içe geçmiş bir yapıya sahip JSON'ları dizine eklemek istiyorum.Solr'da tam yuvalanmış bir belgeyi nasıl alabilirsiniz?

Örnek:

{ 
 
    "id": "myDoc", 
 
    "title": "myTitle" 
 
    "nestedDoc": { 
 
    "name": "test name" 
 
    "nestedAttribute": { 
 
     "attr1": "attr1Val" 
 
    } 
 
    } 
 
}
ben yönetici arayüzü sayesinde doğru saklamak mümkün duyuyorum

:

/Solr/#/myschema/belgeleri

ve ben m ayrıca belgeyi arayabilir ve alabilir.

Karşılaştığım sorun, yanıt belgesini Solr aramamdan aldığımda, iç içe öznitelikleri göremiyorum. Sadece bakın:

{ 
 
    "id": "myDoc", 
 
    "title": "myTitle" 
 
}
döndü belgelerde TÜM iç içe alanları içerecek bir yolu var mı?

Denedim: "fl = [child parentFilter = title: myTitle]" ancak çalışmıyor (ChildDocTransformerFactory from: https://cwiki.apache.org/confluence/display/solr/Transforming+Result+Documents). Bunu yapmanın doğru yolu mu yoksa başka yolu var mı?

Kullanıyorum: Solr 4.10.3 !!!!!!

+0

Herhangi localParams değil [], onların sözdizimi olarak {} kullanmalıdır ve genellikle sorgu/fq bölümleri, alan listesinde gidin. Ebeveyn/çocuk ilişkilerine aşina değilim, bu yüzden senin sorunun mu olduğunu söyleyemem. – MatsLindh

+0

@MatsLindh: https://cwiki.apache.org/confluence/display/solr/Transforming+Result+Documents: Ben den ChildDocTransformerFactory kullanmaya çalışıyordu. Basit sorgularla sadece ana yapıyı (yuvalanmış çocuklar olmadan) görebiliyorum. Herhangi bir fikir? – otrebla

cevap

1

Sen q koyabilirsiniz = ve fl alana {= ebeveyn!}: "Fl = *, [çocuk parentFilter = title: MyTitle]

Size tüm üst alanını ve çocukları verecektir. başlığın alanı: MyTitle

2

tüm iç içe bir yapı iade koyulmak için, gerçekten ChildDocTransformerFactor kullanmaya gerek Ancak, önce ihtiyaç düzgün endeksi belgeleriniz

Eğer sadece yapıyı geçti, olduğu gibi.. , Solr yapacak onları ayrı belgeler olarak x ve gerçekte bağlı olduklarını bilmezler. İç içe geçmiş belgeleri doğru bir şekilde sorgulayabilmek istiyorsanız, veri yapınızı this post'da açıklandığı gibi önceden işlemden geçirmeniz veya bir ön işleme (script önekini kullanarak) kullanmayı deneyin. Ne yazık ki, en son Solr 6.0 dahil olmak üzere, indeksleme ve iç içe geçmiş belge yapıları geri dönüşünde hoş ve sorunsuz bir çözüm yoktur, bu yüzden her şey "geçici çözümler" yoluyla yapılır.

Özellikle senin durumunda, bu işe Belgeniz yapısını dönüştürmek gerekir:

{ 
    "type": "parentDoc", 
    "id": "myDoc", 
    "title": "myTitle" 
    "_childDocuments_": [ 
    { 
    "type": "nestedDoc", 
    "name": "test name", 
    "_childDocuments_" :[ 
    { 
     "type": "nestedAttribute" 
     "attr1": "attr1Val" 
    }] 
    }]  
} 

Daha sonra, aşağıdaki ChildDocTransformerFactor sorgu btw (sen iyi alt belgeleri döndürecektir, bu Solr 4.9 beri mevcut olduğunu söylüyor rağmen test etmek gerek bu yüzden, aslında sadece) ... Solr 5.3 gördüm:

q=title:myTitle&fl=*,[child parentFilter=type:parentDoc limit=50] 

Not, tüm iç içe dokümanları döndürür rağmen iade belge yapısı flattend olacak (a las!)Elde edersiniz:

{ 
    "type": "parentDoc", 
    "id": "myDoc", 
    "title": "myTitle" 
    "_childDocuments_": [ 
    { 
    "type": "nestedDoc", 
    "name": "test name" 
    }, 
    { 
     "type": "nestedAttribute" 
     "attr1": "attr1Val" 
    }]  
} 

Muhtemelen değil gerçekten ... bekleniyordu ancak kadarıyla bu bir yakın gelecekteki bir sürümde giderilecektir talihsiz solr en davranıştır.

+0

Sonuçların düz olmadığını belirten herhangi bir haber var mı? Solr 6 grafiği yapıları yana – DavidVdd

+0

@DavidVdd tanıtıldı ve bunların BlockJoin yetenekleri yerini alacak gibi görünüyor ediliyor. Diğer bir deyişle, yassılaştırma sorunu çözülecekse, BlockJoin çizgisi boyunca değil, grafik çizgisi boyunca yapılacaktır. – alisa