2016-10-12 4 views
0

Я установил Django-Haystack и Whoosh и установил все это после документации к сенату, но независимо от того, что ищу, я всегда получаю «Результаты не найдены». на странице поиска, несмотря на то, что индекс, по-видимому, в порядке.Haystack with Whoosh не возвращает никаких результатов

При запуске "manage.py rebuild_index" это правильно сказано:

Indexing 12 assets 
    indexed 1 - 12 of 12 (worker PID: 1234). 

И при запуске этого в оболочке Django:

from whoosh.index import open_dir 
ix = open_dir('mysite/whoosh_index') 
from pprint import pprint 
pprint(list(ix.searcher().documents())) 

Это правильно возвращает все детали 12 индексируемых активов, поэтому он выглядит как индекс в порядке, но независимо от того, что я ищу, я не могу получить никаких результатов, только «результатов не найдено»!

Я следил за советом в любом другом подобном вопросе о StackOverflow (и везде, что появлялся в Google) безрезультатно.

Есть ли у кого-нибудь предложения?

Файлы (издавал для краткости):

settings.py

INSTALLED_APPS = [ 
.... 
'haystack', 
'assetregister', 
.... 
] 

HAYSTACK_CONNECTIONS = { 
    'default': { 
     'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 
     'PATH': os.path.join(os.path.dirname(__file__), 'whoosh_index'), 
    }, 
} 

models.py

class Asset(models.Model): 
    asset_id = models.AutoField(primary_key=True) 
    asset_description = models.CharField(max_length=200) 
    asset_details = models.TextField(blank=True) 

search_indexes.py

from haystack import indexes 
from .models import Asset 

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

    def get_model(self): 
     return Asset 

    def no_query_found(self): 
     # The .exclude is a hack from another stackoverflow question that prevents it returning an empty queryset 
     return self.searchqueryset.exclude(content='foo') 

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

/шаблоны/поиск/индексов/assetregister/asset_text.txt

{{ object.asset_description }} 
{{ object.asset_details }} 

urls.py

urlpatterns = [ 
    url(r'^search/', include('haystack.urls')), 
] 

search.html

<h2>Search</h2> 

<form method="get" action="."> 
    <table> 
     {{ form.as_table }} 
     <tr> 
      <td>&nbsp;</td> 
      <td> 
       <input type="submit" value="Search"> 
      </td> 
     </tr> 
    </table> 

    {% if query %} 
     <h3>Results</h3> 

     {% for result in page.object_list %} 
      <p> 
       <a href="{{ result.object.get_absolute_url }}">{{ result.object.asset_description }}</a> 
      </p> 
     {% empty %} 
      <p>No results found.</p> 
     {% endfor %} 

    {% else %} 
     {# Show some example queries to run, maybe query syntax, something else? #} 
    {% endif %} 
</form> 

И только в случае, если это полезно, мой "пип замораживанию":

Django==1.9.3 
django-cleanup==0.4.2 
django-haystack==2.5.0 
django-pyodbc-azure==1.9.3.0 
Pillow==3.2.0 
pyodbc==3.0.10 
Whoosh==2.7.4 

ответ

0

В интересах любых будущих людей, имеющих это та же проблема, я нашел нетрадиционное решение ...

Так что я дважды проверял все в соответствии с документацией сена, и все выглядело нормально. Я узнал о пакете пакетов под названием «django-haystackbrowser», который после правильной установки позволяет вам просматривать ваш индекс через интерфейс администратора django.

По какой-то причине, когда я рассматривал индекс в интерфейсе администратора (и подтвердил все было уже там, как это должно быть), а затем перезапустить сервер, используя

python manage.py runserver 

я наконец начал получать результаты поиска обратно!

Не знаю, что вызывало проблему, и, конечно же, не знаю, как просто просмотр индекса с помощью этого пакета исправил его, но теперь он, похоже, возвращает результаты, как следует!

+0

Я пробовал это.Сначала у haystackbrowser были проблемы с совместимостью с Django1.10. Я разблокировал приложение, исправил проблему совместимости, а затем запустил его. Он показывает все элементы, которые были проиндексированы в панели администратора. Я не могу перезапустить сервер, так что, возможно, поэтому, но я все равно не получаю никаких результатов после установки этого приложения. –

Смежные вопросы