Haystack with Whoosh 未返回任何结果
Haystack with Whoosh not returning any results
我已经安装了 Django-Haystack 和 Whoosh,并按照 haystack 文档进行了所有设置,但无论我搜索什么,我总是在搜索页面上得到 "No results found.",尽管索引显然是正常的.
当 运行 "manage.py rebuild_index" 它正确地指出:
Indexing 12 assets
indexed 1 - 12 of 12 (worker PID: 1234).
当 运行 这在 Django 中时 shell:
from whoosh.index import open_dir
ix = open_dir('mysite/whoosh_index')
from pprint import pprint
pprint(list(ix.searcher().documents()))
它正确returns了12个索引资产的所有细节,所以看起来索引没问题,但无论我搜索什么都没有结果,只有"No results found"!
我遵循了 Whosebug 上所有其他类似问题(以及 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 Whosebug 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
/templates/search/indexes/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> </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>
为了以防万一,我的 "pip freeze":
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
为了以后遇到同样问题的人的利益,我找到了一个非常规的解决方案...
所以我根据 haystack 文档仔细检查了所有内容,看起来一切正常。我发现了一个名为 "django-haystackbrowser" 的 pip 包,一旦正确安装,它允许您通过 django 管理界面查看您的索引。
出于某种原因,一旦我在管理界面中查看了索引(并确认一切都已经存在,应该是这样),然后使用
重新启动了服务器
python manage.py runserver
我终于开始找回搜索结果了!
不知道是什么导致了问题,当然也不知道如何使用该包查看索引来修复它,但它现在似乎返回了它应该返回的结果!
我已经安装了 Django-Haystack 和 Whoosh,并按照 haystack 文档进行了所有设置,但无论我搜索什么,我总是在搜索页面上得到 "No results found.",尽管索引显然是正常的.
当 运行 "manage.py rebuild_index" 它正确地指出:
Indexing 12 assets
indexed 1 - 12 of 12 (worker PID: 1234).
当 运行 这在 Django 中时 shell:
from whoosh.index import open_dir
ix = open_dir('mysite/whoosh_index')
from pprint import pprint
pprint(list(ix.searcher().documents()))
它正确returns了12个索引资产的所有细节,所以看起来索引没问题,但无论我搜索什么都没有结果,只有"No results found"!
我遵循了 Whosebug 上所有其他类似问题(以及 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 Whosebug 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
/templates/search/indexes/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> </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>
为了以防万一,我的 "pip freeze":
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
为了以后遇到同样问题的人的利益,我找到了一个非常规的解决方案...
所以我根据 haystack 文档仔细检查了所有内容,看起来一切正常。我发现了一个名为 "django-haystackbrowser" 的 pip 包,一旦正确安装,它允许您通过 django 管理界面查看您的索引。
出于某种原因,一旦我在管理界面中查看了索引(并确认一切都已经存在,应该是这样),然后使用
重新启动了服务器python manage.py runserver
我终于开始找回搜索结果了!
不知道是什么导致了问题,当然也不知道如何使用该包查看索引来修复它,但它现在似乎返回了它应该返回的结果!