87 lines
3.3 KiB
Python
87 lines
3.3 KiB
Python
"""
|
|
Haystack Search Indexes für Elasticsearch
|
|
"""
|
|
|
|
# from haystack import indexes
|
|
# from haystack import site
|
|
from products.models import Product
|
|
from auction.models import Auction
|
|
|
|
|
|
class ProductIndex(indexes.SearchIndex, indexes.Indexable):
|
|
"""Product Search Index"""
|
|
|
|
text = indexes.CharField(document=True, use_template=True)
|
|
title = indexes.CharField(model_attr='name', boost=2.0)
|
|
description = indexes.CharField(model_attr='description', boost=1.5)
|
|
category = indexes.CharField(model_attr='category', faceted=True)
|
|
fursuit_type = indexes.CharField(model_attr='fursuit_type', faceted=True)
|
|
price = indexes.DecimalField(model_attr='price')
|
|
featured = indexes.BooleanField(model_attr='featured')
|
|
created_at = indexes.DateTimeField(model_attr='created_at')
|
|
|
|
# Autocomplete fields
|
|
title_auto = indexes.EdgeNgramField(model_attr='name')
|
|
description_auto = indexes.EdgeNgramField(model_attr='description')
|
|
category_auto = indexes.EdgeNgramField(model_attr='category')
|
|
|
|
# Suggest field
|
|
title_suggest = indexes.CharField(model_attr='name')
|
|
|
|
def get_model(self):
|
|
return Product
|
|
|
|
def index_queryset(self, using=None):
|
|
"""Used when the entire index for model is updated."""
|
|
return self.get_model().objects.filter(is_active=True)
|
|
|
|
def prepare_text(self, obj):
|
|
"""Prepare text field for search"""
|
|
return f"{obj.name} {obj.description} {obj.category} {obj.fursuit_type}"
|
|
|
|
def prepare_title_suggest(self, obj):
|
|
"""Prepare suggestion field"""
|
|
return obj.name
|
|
|
|
|
|
class AuctionIndex(indexes.SearchIndex, indexes.Indexable):
|
|
"""Auction Search Index"""
|
|
|
|
text = indexes.CharField(document=True, use_template=True)
|
|
title = indexes.CharField(model_attr='title', boost=2.0)
|
|
description = indexes.CharField(model_attr='description', boost=1.5)
|
|
character_description = indexes.CharField(model_attr='character_description', boost=1.2)
|
|
fursuit_type = indexes.CharField(model_attr='fursuit_type', faceted=True)
|
|
status = indexes.CharField(model_attr='status', faceted=True)
|
|
starting_bid = indexes.DecimalField(model_attr='starting_bid')
|
|
current_bid = indexes.DecimalField(model_attr='current_bid')
|
|
created_at = indexes.DateTimeField(model_attr='created_at')
|
|
end_time = indexes.DateTimeField(model_attr='end_time')
|
|
|
|
# Autocomplete fields
|
|
title_auto = indexes.EdgeNgramField(model_attr='title')
|
|
description_auto = indexes.EdgeNgramField(model_attr='description')
|
|
character_description_auto = indexes.EdgeNgramField(model_attr='character_description')
|
|
|
|
# Suggest field
|
|
title_suggest = indexes.CharField(model_attr='title')
|
|
|
|
def get_model(self):
|
|
return Auction
|
|
|
|
def index_queryset(self, using=None):
|
|
"""Used when the entire index for model is updated."""
|
|
return self.get_model().objects.filter(status__in=['active', 'draft'])
|
|
|
|
def prepare_text(self, obj):
|
|
"""Prepare text field for search"""
|
|
return f"{obj.title} {obj.description} {obj.character_description} {obj.fursuit_type}"
|
|
|
|
def prepare_title_suggest(self, obj):
|
|
"""Prepare suggestion field"""
|
|
return obj.title
|
|
|
|
|
|
# Register indexes
|
|
# site.register(Product, ProductIndex)
|
|
# site.register(Auction, AuctionIndex) |