【问题标题】:date_facet in Django Haystack not faceting by dateDjango Haystack 中的 date_facet 不按日期分面
【发布时间】:2019-10-01 17:35:03
【问题描述】:

我将 Haystack 2.8.1 与 Django 2.1 和 Solr 6.6.6 一起使用。

我在使用构面时没有问题,但是日期构面不起作用。

我的索引:

class ConflitoIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    data_inicio = indexes.DateField(model_attr="data_inicio", faceted=True, null=True)

    def get_model(self):
        return Conflito

    def index_queryset(self, using=None):
        return self.get_model().objects.all()

shell 上的以下脚本:

from haystack.query import SearchQuerySet                                                                                                   
import datetime                                                                                                                             
sqs = SearchQuerySet().date_facet("data_inicio", start_date=datetime.date(1980, 1, 1), end_date=datetime.date(2019, 1, 1), gap_by="year")   

结果:

In [1]: sqs.facet_counts()                                                                                                                          
Out[1]: {'fields': {}, 'dates': {}, 'queries': {}}

但是,以下脚本会导致:

In [1]: from haystack.query import SearchQuerySet                                                                                                   
In [2]: import datetime                                                                                                                             
In [3]: sqs = SearchQuerySet().facet('data_inicio')                                                                                                 
In [4]: sqs.facet_counts()                                                                                                                          
Out[4]: 
{'fields': {'data_inicio': [('1500-01-01T00:00:00Z', 212),
   ('1986-12-29T00:00:00Z', 148),
   ('2010-01-01T00:00:00Z', 141),
   ('1979-12-29T00:00:00Z', 130),
   ('2018-01-01T00:00:00Z', 104),
   ('1984-12-29T00:00:00Z', 100),
   ...
   ('2013-10-16T00:00:00Z', 17),
   ('1982-12-02T00:00:00Z', 16),
   ('1988-02-28T00:00:00Z', 16),
   ('1996-05-29T00:00:00Z', 16),
   ('1998-03-29T00:00:00Z', 16),
   ('2000-01-31T00:00:00Z', 16)]},
 'dates': {},
 'queries': {}}

因此,分面不适用于日期。我的代码有什么问题?不幸的是,Haystack 文档中很少有日期分面的示例。

最好, 艾伦

【问题讨论】:

    标签: django solr django-haystack


    【解决方案1】:

    这是因为 facet.date API 在 Solr 6.6 中消失了,取而代之的是 facet.range。更多详情请参见 Solr docissue #1572

    要解决,请考虑PR #1690

    • 固定后端

    • 在 generic_views 上添加属性 date_facet_fields,接收 date_facet kwargs 列表。例如:

    # your views.py
    import datetime
    ...
    class YourFacetedSearchView(FacetedSearchView):
        date_facet_fields = [
            {'field': 'data_inicio',
             'start_date': datetime.date(1980, 1, 1),
             'end_date': datetime.date.today(),
             'gap_by': 'year'},
        ]
    
        facet_fields = [...]
    ...
    

    最好的问候,

    法比奥

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 2021-05-21
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      相关资源
      最近更新 更多