I'm using Haystack 2.8.1 with Django 2.1 and Solr 6.6.6.
I have no problems using facets, however date faceting is not working.
My index:
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()
The following script on 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")
results in:
In [1]: sqs.facet_counts()
Out[1]: {'fields': {}, 'dates': {}, 'queries': {}}
However, the following script results in:
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': {}}
Thus, faceting is not working for dates. What can be wrong in my code? Unfortunately there are very few examples for date faceting in Haystack documentation.
best, alan
This occour because facet.date API is gone in Solr 6.6, replaced with facet.range. More details found in Solr doc and issue #1572
To solved consider PR #1690 with:
fixed backend
add attribute date_facet_fields
on generic_views receiving a list of date_facet kwargs. Ex.:
# 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 = [...]
...
best regards,
Fábio