带有弹性搜索的Django Haystack没有提供任何结果

时间:2016-08-06 21:26:54

标签: python django elasticsearch django-haystack

免责声明:请不要感到需要通过以下所有代码进行排序,我只是在这里提供所有相关信息以解决问题

我正在使用django创建一个Web应用程序,我想实现一个工作搜索栏。在做了一些研究后,看起来像有弹性搜索的干草堆是一种流行的选择。我遵循了一些教程,最让我学到的是:

http://nanvel.name/2013/07/django-haystack-example

我整个过程都遵循了教程,并将所有内容与我的数据库和模型连接起来,但是当我在搜索栏中输入内容时,它不会给出任何结果,即使输入是直接匹配到数据库中的内容。这是我尝试实现所有这些的代码。

型号:

class GameCard(models.Model):
    title = models.CharField(max_length=250)
    console = models.CharField(max_length=500)
    genre = models.CharField(max_length=500)
    coverArt = models.CharField(max_length=1000)

添加到settings.py:

INSTALLED_APPS = [
    'gamelobby.apps.GamelobbyConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'haystack',
]

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://127.0.0.1:9200/',
        'INDEX_NAME': 'haystack',
    },
}

HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

添加到views.py

def GameCards(request):
    form = GameCardSearchForm(request.GET)
    GameCards = form.search()
    return render_to_response('search/search.html', {'GameCards': GameCards})

GameCar_text.txt文件:

{{ object.title }}
{{ object.coverArt }}

Search_indexes.py:

from django.utils import timezone
from haystack import indexes

from .models import GameCard


class GameCardIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    title = indexes.CharField(model_attr='title')
    coverArt = indexes.CharField(model_attr='coverArt')

    def get_model(self):
        return GameCard

    def index_queryset(self, using=None):
        """Used when the entire index for model is updated."""
        return self.get_model().objects.filter(timestamp__lte=timezone.now())

search.html:

{% extends 'gamelobby/home.html' %}

{% block content %}
<form type="get" action=".">
    <input type="text" name="q">
    <button type="submit">Search</button>
</form>

{% for GameCard in GameCards %}
<h1>{{ GameCard.title }}</h1>
<p>
    {{ GameCard.coverArt }}
</p>
{% endfor %}
{% endblock %}

Forms.py:

class GameCardSearchForm(SearchForm):

    def no_query_found(self):
        return self.searchqueryset.all()

我很确定我已经覆盖了所有基础,我无法弄清楚为什么html页面上没有显示任何结果。顺便说一句,我当然把search.html连接到带有块标签的主要其他html文件我只是认为它会占用太多空间来包含该文件中的所有html,而且我不相信它与问题。无论如何,如果有人有任何提示或解决方案,那将是很好的,请不要觉得有必要通过所有这些代码我只是觉得这是正确的可能的信息是正确的。谢谢!

0 个答案:

没有答案