2016-04-13 16 views
0

Kopyaları bulmak için solr'un faset modunu kullanıyorum. Oldukça iyi çalışıyor ama nesnenin kimliğini nasıl alacağımı anlayamıyorum.Solr4 ve Haystack ile tekrarlanan nesneleri bul

>>> from haystack.query import SearchQuerySet 
>>> sqs = SearchQuerySet().facet('text_string', limit=-1) 
>>> sqs.facet_counts() 
{ 
    'dates': {}, 
    'fields': { 
     'text_string': [ 
      ('the red ballon', 4), 
      ('my grand pa is an alien', 2), 
      ('be kind rewind', 12), 
     ], 
    }, 
    'queries': {} 
} 

nasıl, vs. 'benim büyük pa uzaylı' kırmızı balon 'benim nesnelerin kimliği almak Ben solr ait schema.xml içinde kimliği alanını eklemek zorunda yapabilirim? Böyle

Beklediğim şey:

>>> sqs.facet_counts() 
{ 
    'dates': {}, 
    'fields': { 
     'text_string': [ 
      (object_id, 'the red ballon', 4), 
      (object_id, 'my grand pa is an alien', 2), 
      (object_id, 'be kind rewind', 12), 
     ], 
    }, 
    'queries': {} 
} 

DÜZENLEME: solr

... 
    <fields> 
    <!-- general --> 
    <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/> 
    <field name="django_ct" type="string" indexed="true" stored="true" multiValued="false"/> 
    <field name="django_id" type="string" indexed="true" stored="true" multiValued="false"/> 
    <field name="_version_" type="long" indexed="true" stored ="true"/> 
    <dynamicField name="*_i" type="int" indexed="true" stored="true"/> 
    <dynamicField name="*_s" type="string" indexed="true" stored="true"/> 
    <dynamicField name="*_l" type="long" indexed="true" stored="true"/> 
    <dynamicField name="*_t" type="text_en" indexed="true" stored="true"/> 
    <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/> 
    <dynamicField name="*_f" type="float" indexed="true" stored="true"/> 
    <dynamicField name="*_d" type="double" indexed="true" stored="true"/> 
    <dynamicField name="*_dt" type="date" indexed="true" stored="true"/> 
    <dynamicField name="*_p" type="location" indexed="true" stored="true"/> 
    <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/> 

    <field name="text" type="text_en" indexed="true" stored="true" multiValued="false" termVectors="true" /> 
    <field name="title" type="text_en" indexed="true" stored="true" multiValued="false" /> 

    <!-- Used for duplicate content detection --> 
    <copyField source="title" dest="text_string" /> 
    <field name="text_string" type="string" indexed="true" stored="true" multiValued="false" /> 
    <field name="pk" type="long" indexed="true" stored="true" multiValued="false" /> 

    </fields> 

    <!-- field to use to determine and enforce document uniqueness. --> 
    <uniqueKey>id</uniqueKey> 

    <!-- field for the QueryParser to use when an explicit fieldname is absent --> 
    <defaultSearchField>text</defaultSearchField> 

    <!-- SolrQueryParser configuration: defaultOperator="AND|OR" --> 
    <solrQueryParser defaultOperator="AND"/> 
... 

searche_indexes.py eklendi schema.xml ve search_indexes.py

schema.xml

class VideoIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    pk = indexes.IntegerField(model_attr='pk') 
    title = indexes.CharField(model_attr='title', boost=1.125) 

    def index_queryset(self, using=None): 
     return Video.on_site.all() 

    def get_model(self): 
      return Video 
+0

Kimlik alanını indekslediniz mi? eğer şema.xml içinde eklemeniz gerekmiyorsa ve sonuçta bunu istiyorsanız .. sorguda aynı olduğunu söyleyebiliriz ... –

+0

Eğer schema.xml için ID (pk) eklerseniz error: TypeError: __init __() anahtar kelime argümanı için birden fazla değere sahip 'pk' – kollo

+0

zaten bir isim kimliği olan bir alan var ...? ve schema.xml –

cevap

0

Faceting, arama sonuçlarının kategorilere (dizine eklenmiş terimleri temel alan) düzenlenmesidir. Her bir kategori içinde, Solr, ilgili terim için isabet sayısını bildirir ve bu durum faset kısıtlaması olarak adlandırılır. Faceting, kullanıcıların bir kategoride çok sayıda kategorinin ve birçok öğenin bulunduğu film siteleri ve ürün inceleme siteleri gibi sitelerde arama sonuçlarını keşfetmesini kolaylaştırır. İşte

....

... bunun iyi bir örneğidir

faceting example by Yonik

Senin durumunda

faceting example on solr wiki

Eğer kimliği ve othere ayrıntıları almak için tekrar bir sorgu ateş gerekebilir