2016-02-15 2 views
0

У меня есть проект, основанный наНевозможно найти часть слагаемого с Джанго Хейстек и Elasticsearch

Django==1.9.2 
django-haystack==2.4.1 
elasticsearch==2.2.0 

очень простой вид поиска:

def search_view(request): 
    query = request.GET.get('q', '') 
    sqs = SearchQuerySet().filter(content=query) 
    params = { 
     'results': sqs, 
     'query': query, 
    } 
    return render_to_response('results.html', params, 
     context_instance=RequestContext(request)) 

Мой индекс поиска просто:

class CategoryIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    name = indexes.CharField(model_attr='name') 

    def get_model(self): 
     return Category 

    def index_queryset(self, using=None): 
     return self.get_model().objects.filter(published=True) 

файл category_text.txt просто:

{{ object.name }} 

В моей базе данных у меня есть несколько пунктов:

  • Acqua
  • Acquario
  • Ачето
  • Accento

Когда я ищу с моей точки зрения, у меня есть странное поведения.

  1. Ищет по запросу "ac" Я не получил никаких результатов! Я ожидал иметь все мои предметы. Я попытался изменить запрос, используя .filter(content__contains=query) (я знаю, что это значение по умолчанию!), Но ничего не изменилось.

  2. Поиск с запросом «acqua» Я получаю 1 результат (правильный) с объектом результата, но когда я пытаюсь его распечатать, поле result.object - None (другие поля содержат правильную информацию).

Что я делаю неправильно? Спасибо.

UPDATE

Я нашел решение моей проблемы номер 2. Последнюю версию Хейстекла от PyPi не Django 1.9.x совместимы. Я только что добавил -e git+https://github.com/django-haystack/django-haystack.git#egg=django-haystack в свой файл requirements.txt, и проблема исправлена. Подробнее об этом на GitHub: https://github.com/django-haystack/django-haystack/issues/1291

Остальные проблемы все еще открыты, и я не могу найти для этого решения.

ответ

1

Похоже, вы можете столкнуться с минимальным количеством символов для # 1. Взгляните на Haystack documents for autocomplete, который показывает подход, используя EdgeNgramField вместо типичного CharField.

+0

Мой пример был всего лишь примером более сложного случая. Обычно я использую более 3 символов, и я попытался использовать поле EdgeNgramField. –

+1

Похоже, что установка Elasticearch по умолчанию для Haystack не выходила из коробки. [Помогает ли эта ссылка?] (Https://wellfire.co/learn/custom-haystack-elasticsearch-backend/) Похоже, что что-то подобное было [упаковано, чтобы помочь в этих случаях.] (Https: // github .com/bennylope/elasticstack) – Tom