2016-04-13 34 views
2

Solr 5.4.0 kullanıyorum. Ben iç içe belgelerle bazı basit veri aktardıysanız:Solr, çocuk belgelerini filtrelerken yanlış sonuçlar döndürüyor

<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> 

alan tanımları şunlardır:

<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> 

ben çocuk belgesi olarak d2 olan tüm belgeleri bulmak gerek. Ben sorguyu kullanarak:

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

Ben sonuç olarak d5 beklenebilir ama bunun yerine alıyorum:

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

Neden d3 burada döndürülür? D3'ü filtrelemek için bu sorguya hangi koşulu eklemeliyim?

+0

Bunun neden olduğunu anladınız mı? 6.6'da benzer bir şey gördüm, ama bizim durumumuzda kemancı ele geçirdik ve hepsi doğru görünüyordu, ama 100 belgeden en az 1 tanesi konudan etkilendi. – eglasius

cevap

0

Ben iki şey burada devam görebilirsiniz:

https://stackoverflow.com/a/31952527/3229995 benim cevap olarak
  1. , tarla "content_type" Yalnızca üst belgelerde bulunmalıdır. Daha önceki Solr sürümlerinde, çocuk belgelerinde başka bir değere sahip olan "content_type" alanının bulunduğu bazı tutarsız davranışlarım vardı ve bu sorunun geçerli sürümde çözülüp çözülmediğini bilmiyorum.

  2. Veri kümenizde id = "d2" yazan iki belge vardır. Solr'da, her belge benzersiz bir tanıtıcıya sahiptir, varsayılan olarak bu kimlik alanıdır. Koleksiyonunuzda aynı benzersiz tanıtıcıya sahip iki belge olamaz.

Blok birleştirici sorgu ayrıştırıcısının düzgün çalışması için her iki noktayı da buna göre değiştirmeyi öneririm.

+1

ad 2, evet, alan kodumu örnek kodumda değiştirdim. Gerçek verilerde, alanın başka bir ismi vardır, bu yüzden hatanın nedeni değil. –

+0

1'de gösterildiği gibi, örnekte "content_type" alanını ana dokümanlarınıza ekleyin. O zaman işe yarıyor mu? – tkja

İlgili konular