Как ограничить количество результатов поиска или установить тайм-аут в стоге сена с свистом? - PullRequest
2 голосов
/ 28 марта 2012

Я использую стог сена с whoosh для поиска кода моей компании, каждый файл по индексу.В большинстве случаев все работает нормально.Тем не менее, когда я выполняю поиск по какому-либо общему слову, например, «порт», процесс поиска занимает 5 минут, а загрузка процессора составляет 100%.Я думаю, что это потому, что счетчик результатов слишком велик (5000+ для ключевого порта).Действительно, мне не нужно так много результатов, может быть, 100 или около того достаточно.Как я могу установить лимит?или тайм-аут тоже в порядке.

Ответы [ 3 ]

2 голосов
/ 20 декабря 2012

Да, вы можете, нет ничего особенного в классе SearchView по умолчанию и его методах. Вот пример с практическими рекомендациями:

URL-адреса yourapp

# Django specific
from django.conf.urls import *

# App specific
from yourapp.search.views import AdvancedSearchView

urlpatterns = patterns('yourapp.views',
    url(r'^$', AdvancedSearchView(), name='yourapp_search'),
)

вид

# Django specific
from django.conf import settings

# App specific
from haystack.views import SearchView

LIMIT = getattr(settings, 'HAYSTACK_MAX_RESULTS', 50)

class AdvancedSearchView(SearchView):
    def get_results(self):
        return self.form.search()[:LIMIT]

URL проекта

urlpatterns += patterns('',
    url(r'^search/$', include('yourapp.search.urls'))
)

Вы можете переопределить глобальное в ваших настройках:

settings.py

HAYSTACK_MAX_RESULTS = 15
0 голосов
/ 15 января 2013

Может быть, вам стоит взглянуть на ограниченные по времени поиски .В сочетании с ограниченным экземпляром Collector вы сможете решить свою проблему.

0 голосов
/ 29 марта 2012

Взгляните на нумерацию страниц django - если вы реализуете это, он будет показывать только подмножество результатов на страницу и не должен использовать так много ЦП. Тем не менее, вы можете попробовать использовать другой бэкэнд, если у вас есть тысячи элементов в вашем поисковом индексе - я нашел идеал для небольших индексов (до 1000 элементов), но немного медленнее.

...