在我的Django项目中,我正在使用Celery.我将来自crontab的命令切换为周期性任务,但它运行良好,但它只是在模型上调用方法.是否可以从周期性任务更新我的Haystack索引?有没有人这样做过?
/manage.py update_index
Run Code Online (Sandbox Code Playgroud)
这是从Haystack文档更新索引的命令,但我不确定如何从任务中调用它.
我正在使用apache solr搜索引擎来索引我的网站数据库..
我正在使用django + http://haystacksearch.org/
所以,假设我的文件中有"鸡"字样
当我搜索"鸡"时 - solr可以找到这个文件
但是,当我搜索"小鸡"时 - 它没有找到任何东西..
有没有办法来解决这个问题 ?
我需要一个简单的搜索工具来支持我的django网站,所以我选择了Haystack和Solr.我已经正确设置了所有内容,并且当我输入确切的短语时可以找到正确的搜索结果,但在键入部分短语时我无法获得任何结果.
例如:"John"返回"John Doe",但"Joh"不返回任何内容.
模型:
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)
搜索索引:
class PersonIndex(SearchIndex):
text = CharField(document=True, use_template=True)
first_name = CharField(model_attr = 'first_name')
last_name = CharField(model_attr = 'last_name')
site.register(Person, PersonIndex)
Run Code Online (Sandbox Code Playgroud)
我猜测有一些我缺少的设置可以实现部分字段匹配.我见过人们EdgeNGramFilterFactory()在一些论坛上谈论过,我用谷歌搜索过它,但我不太确定它的实现.另外,我希望有一个特定于干草堆的方式,以防万一我切换到搜索后端.
我将一个包(称为pysolr 2.0.15)下载到我的计算机上,与Haystack一起使用.说明要求我将pysolr添加到我的PYTHONPATH中.
这到底是什么意思呢?在解压缩pysolr文件之后,我运行了命令python setup.py install,这就是它.我做了什么,我还需要做什么?
谢谢您的帮助!
我现在很困惑.我有一个Django项目一直很好,直到我试图添加Haystack/Whoosh进行搜索.我在其他项目中有相同的堆栈工作正常.
每当我在我的settings.INSTALLED_APPS中有"haystack"并且我尝试manage.py runserver或者manage.py shell我得到'错误:无法导入名称openProc'
我认为这可能是Haystack的依赖,但没有正确安装,所以我从网站包中删除了Haystack并重新安装,但同样的事情不断发生.谷歌搜索openProc和相关的关键字没有任何结果.
我希望其他人遇到这个错误,或者至少现在谷歌会有一些可能有答案的东西!我知道这些cannot import name <something>错误可能很棘手,但是这一点让我特别难过,因为它与外部包有关.
我正在使用haystack和whoosh作为Django app的后端.
有没有办法查看whoosh生成的索引的内容(以易于阅读的格式)?我想看看哪些数据被编入索引,以及如何更好地理解它是如何工作的.
有没有办法让django-haystack的{% highlight %}模板标签显示传入的完整变量,而不是在第一次匹配之前删除所有内容?
我这样使用它:
{% highlight thread.title with request.GET.q %}
Run Code Online (Sandbox Code Playgroud) 我目前正在运行带有弹性搜索后端的haystack,现在我正在为城市名称构建自动完成功能.问题是SearchQuerySet给了我不同的结果,从我的角度来看是错误的,而不是直接在elasticsearch中执行的相同查询,这对我来说是预期的结果.
我正在使用:Django 1.5.4,django-haystack 2.1.0,pyelasticsearch 0.6.1,elasticsearch 0.90.3
使用以下示例数据:
使用其中之一
SearchQuerySet().models(Geoname).filter(name_auto='mid')
or
SearchQuerySet().models(Geoname).autocomplete(name_auto='mid')
Run Code Online (Sandbox Code Playgroud)
结果总是返回所有6个名称,包括Min*和Mia*...但是,查询elasticsearch会直接返回正确的数据:
"query": {
"filtered" : {
"query" : {
"match_all": {}
},
"filter" : {
"term": {"name_auto": "mid"}
}
}
}
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1,
"hits": [
{
"_index": "haystack",
"_type": "modelresult",
"_id": "csi.geoname.4075977",
"_score": 1,
"_source": {
"name_auto": "Midfield",
}
},
{
"_index": "haystack",
"_type": "modelresult", …Run Code Online (Sandbox Code Playgroud) 我有一个简单的设置与django-haystack和嗖嗖引擎.搜索产生19个物体花了我8秒钟.我用django-debug-toolbar确定我有一堆重复的查询.
然后我将我的搜索视图更新为预取关系,以便不会发生重复查询:
class MySearchView(SearchView):
template_name = 'search_results.html'
form_class = SearchForm
queryset = RelatedSearchQuerySet().load_all().load_all_queryset(
models.Customer, models.Customer.objects.all().select_related('customer_number').prefetch_related(
'keywords'
)
).load_all_queryset(
models.Contact, models.Contact.objects.all().select_related('customer')
).load_all_queryset(
models.Account, models.Account.objects.all().select_related(
'customer', 'account_number', 'main_contact', 'main_contact__customer'
)
).load_all_queryset(
models.Invoice, models.Invoice.objects.all().select_related(
'customer', 'end_customer', 'customer__original', 'end_customer__original', 'quote_number', 'invoice_number'
)
).load_all_queryset(
models.File, models.File.objects.all().select_related('file_number', 'customer').prefetch_related(
'keywords'
)
).load_all_queryset(
models.Import, models.Import.objects.all().select_related('import_number', 'customer').prefetch_related(
'keywords'
)
).load_all_queryset(
models.Event, models.Event.objects.all().prefetch_related('customers', 'contracts', 'accounts', 'keywords')
)
Run Code Online (Sandbox Code Playgroud)
但即便如此,搜索仍需要5秒钟.然后我使用了profiler django-debug-toolbar,它给了我这个信息:
据我所知,问题在于haystack/query:779::__getitem__,它被击中两次,每次耗费1.5秒.我浏览过有问题的代码,但无法理解它.那么我从哪里开始呢?
将我的Django从1.7更新到1.9后,基于Haystack和Solr的搜索引擎停止工作.这就是我得到的:
./manage.py shell
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from haystack.query import SearchQuerySet
>>> sqs = SearchQuerySet().all()
>>>sqs[0].pk
u'1'
>>> sqs[0].text
u'\u06a9\u0627\u0645\u0631\u0627\u0646 \u0647\u0645\u062a\u200c\u067e\u0648\u0631 \u0648 \u0641\u0631\u0647\u0627\u062f \u0628\u0627\u062f\u067e\u0627\nKamran Hematpour & Farhad Badpa'
>>> sqs[0].model_name
u'artist'
>>> sqs[0].id
u'mediainfo.artist.1'
>>> sqs[0].object
Model could not be found for SearchResult '<SearchResult: mediainfo.artist (pk=u'1')>'.
Run Code Online (Sandbox Code Playgroud)
我不得不说我的数据库不是真的,我的配置如下:
HAYSTACK_CONNECTIONS ={
'default': {
'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
'URL': 'http://ahangsolr:8983/solr',
},
}
Run Code Online (Sandbox Code Playgroud)
这是我的search_indexes.py:
import datetime …Run Code Online (Sandbox Code Playgroud)