Django-haystack полнотекстовый поиск работает, но аспекты не
Использование django-haystack и asticsearch. Полнотекстовый поиск работает нормально, но у меня проблемы с реализацией граней. Я искал учебник в Интернете, но безуспешно, другими словами, не понял ни одного из них. Я новичок в программировании, поэтому некоторая помощь будет оценена. Заранее спасибо. Извините за мой английский, если не хорошо, это не мой основной язык. Вот мой рабочий полнотекстовый поиск.
articles.models.py
class Article(models.Model):
category = models.CharField(max_length=60)
subcategory = models.CharField(max_length=100)
name = models.CharField(max_length=255)
price = models.DecimalField(max_digits=8, decimal_places=2)
pub_date = models.DateTimeField(auto_now_add=True)
country = models.CharField(max_length=60)
city = models.CharField(max_length=60)
# other fields ...
12 категорий (Транспорт и запчасти, Компьютеры и комплектующие....)
Подкатегории для транспортных средств и запчастей (автомобилей, грузовиков, мотоциклов, запчастей....) Я решил эту проблему с помощью JavaScript при отправке формы для статьи, то же самое для страны и города.
articles.search_indexes.py
class ArticleIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
subcategory = indexes.CharField(model_attr='subcategory', faceted=True)
price = indexes.DecimalField(model_attr='price', faceted=True)
pub_date = indexes.DateTimeField(model_attr='pub_date', faceted=True)
country = indexes.CharField(model_attr='country', faceted=True)
city = indexes.CharField(model_attr='city', faceted=True)
content_auto = indexes.EdgeNgramField(model_attr='name')
def get_model(self):
return Article
def index_queryset(self, using=None):
return self.get_model().objects.all()
articles_text
{{ object.name }}
{{ object.subcategory }}
{{ object.price }}
{{ object.pub_date }}
{{ object.country }}
{{ object.city }}
articles.views.py
def searchArticles(request):
articles = SearchQuerySet().autocomplete(content_auto=request.POST.get('search_text', ''))
return render_to_response('ajax_search.html', {'articles': articles})
base.html
{% csrf_token %}
<input type="text" id="search" class="edo-trazi" name="search" />
<ul id="search-results">
</ul>
ajax_search.html
{% if articles.count > 0 %}
{% for article in articles %}
<li class="edo-trazi-artikal"><img class="edo-trazi-slika" src="/static/aktiva/{{ artikal.object.slika }}"/>
<a class="edo-trazi-ime" href="/artikli/prikazi/{{ artikal.object.id }}/{{ artikal.object.slug }}/">{{ artikal.object.name }}</a>
{% endfor %}
{% else %}
<li>No results!</li>
{% endif %}
ajax.js
$(function(){
$('#search').keyup(function() {
$.ajax({
type: "POST",
url: "/search/",
data: {
'search_text' : $('#search').val(),
'csrfmiddlewaretoken' : $("input[name=csrfmiddlewaretoken]").val()
},
success: searchSuccess,
dataType: 'html'
});
});
});
function searchSuccess(data, textStatus, jqXHR)
{
$('#search-results').html(data);
}
project.urls.py
url(r'^search/$', 'articles.views.searchArticles'),
url(r'^vehicles-parts/', include('vehiclesParts.urls')),
Приведенный выше пример кода работает нормально, если кто-то заинтересован в автозаполнении, я могу рассказать ему столько, сколько знаю.
vehiclesParts.urls.py
url(r'^$', 'vehiclesParts.views.vehiclesPartsView', name='vehiclesParts'),
url(r'^search/$', 'vehiclesParts.views.searchVehiclesParts'),
vehiclesParts.views.py
def vehiclesPartsView(request):
return render_to_response('vehiclesParts.html', context_instance=RequestContext(request))
def searchVehiclesParts(request):
articles = SearchQuerySet().facet('subcategory').facet('price').facet('pub_date').facet('country').facet('city')
# how to make this code run in similar way like above autocomplete(with ajax), also to
# filter results by category "filter (category= 'Vehicles and Parts')", because this
# advanced search I'll have to do for each category to display and search
# articles only for that category.
return render_to_response('ajax-vehiclesParts.html', {'articles': articles})
ajax-VehiclesParts.html - может совпадать с ajax_search.html. Я просто добавлю несколько дополнительных полей. vehicleParts.html - Как добавить фасеты в шаблон и в выбранную подкатегорию или что-то еще, чтобы отобразить результаты в ajax-VehiclesParts.html через Ajax? Также, если возможно запомнить выбранную подкатегорию, так что если следующий выбран "город Лондон" или что-то еще, чтобы отобразить результаты только для этой подкатегории.
ajax-VehiclesParts.js?????