首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用solr4和Haystack查找重复对象

用solr4和Haystack查找重复对象
EN

Stack Overflow用户
提问于 2016-04-13 11:01:59
回答 1查看 169关注 0票数 1

我使用solr的facet模式查找重复项。它运行得很好,但我不知道如何获得对象的id。

代码语言:javascript
复制
>>> 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': {}
}

我怎样才能得到我的物体的id‘红球’,‘我的爷爷是一个外星人’等等,我是不是必须在schema.xml of solr中添加id字段?

我期待着这样的事情:

代码语言:javascript
复制
>>> 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': {}
}

编辑:添加了schema.xml和search_indexes.py

solr的schema.xml

代码语言:javascript
复制
...
  <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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-14 06:06:35

Faceting是将搜索结果按类别排列(基于索引项)。在每个类别中,Solr报告相关术语的点击次数,这称为facet约束。Faceting使用户很容易在电影网站和产品评论站点等网站上探索搜索结果,在这些站点中,一个类别中有许多类别和许多项目。

这是一个很好的例子..。

Yonik的简单例子

solr wiki上的简化示例

在您的情况下,您可能需要再次触发查询才能获得id和othere的详细信息.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36596375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档