date_facet в стоге сена Django не огранка по дате - PullRequest
0 голосов
/ 01 октября 2019

Я использую 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()

Следующий скрипт на оболочке:

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 очень мало примеров для огранки дат.

best, alan

1 Ответ

1 голос
/ 25 октября 2019

Это происходит потому, что API-интерфейс facet.date отсутствует в Solr 6.6 и заменен на facet.range. Более подробную информацию можно найти в Solr doc и выпуске # 1572

Для решения рассмотрим PR # 1690 с:

  • исправлен бэкэнд

  • добавить атрибут date_facet_fields в generic_views, получающих список kwargs date_facet. Пример: * 10101 * *1001*

# 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 = [...]
...

С наилучшими пожеланиями,

Фабио

...