标签: django-haystack

使用Django + Celery更新Haystack搜索索引

在我的Django项目中,我正在使用Celery.我将来自crontab的命令切换为周期性任务,但它运行良好,但它只是在模型上调用方法.是否可以从周期性任务更新我的Haystack索引?有没有人这样做过?

/manage.py update_index
Run Code Online (Sandbox Code Playgroud)

这是从Haystack文档更新索引的命令,但我不确定如何从任务中调用它.

python django indexing celery django-haystack

30
推荐指数
4
解决办法
8026
查看次数

Apache solr搜索部分单词

我正在使用apache solr搜索引擎来索引我的网站数据库..

我正在使用django + http://haystacksearch.org/

所以,假设我的文件中有"鸡"字样

当我搜索"鸡"时 - solr可以找到这个文件

但是,当我搜索"小鸡"时 - 它没有找到任何东西..

有没有办法来解决这个问题 ?

django solr django-search-lucene django-haystack

22
推荐指数
2
解决办法
8249
查看次数

如何使用Haystack进行部分场匹配?

我需要一个简单的搜索工具来支持我的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()在一些论坛上谈论过,我用谷歌搜索过它,但我不太确定它的实现.另外,我希望有一个特定于干草堆的方式,以防万一我切换到搜索后端.

django search search-engine django-haystack

19
推荐指数
2
解决办法
6563
查看次数

如何在PYTHONPATH中添加一些东西?

我将一个包(称为pysolr 2.0.15)下载到我的计算机上,与Haystack一起使用.说明要求我将pysolr添加到我的PYTHONPATH中.

这到底是什么意思呢?在解压缩pysolr文件之后,我运行了命令python setup.py install,这就是它.我做了什么,我还需要做什么?

谢谢您的帮助!

python django pysolr pythonpath django-haystack

18
推荐指数
2
解决办法
3万
查看次数

INSTALLED_APPS中的干草堆导致错误:无法导入名称openProc

我现在很困惑.我有一个Django项目一直很好,直到我试图添加Haystack/Whoosh进行搜索.我在其他项目中有相同的堆栈工作正常.

每当我在我的settings.INSTALLED_APPS中有"haystack"并且我尝试manage.py runserver或者manage.py shell我得到'错误:无法导入名称openProc'

我认为这可能是Haystack的依赖,但没有正确安装,所以我从网站包中删除了Haystack并重新安装,但同样的事情不断发生.谷歌搜索openProc和相关的关键字没有任何结果.

我希望其他人遇到这个错误,或者至少现在谷歌会有一些可能有答案的东西!我知道这些cannot import name <something>错误可能很棘手,但是这一点让我特别难过,因为它与外部包有关.

python django-haystack

16
推荐指数
2
解决办法
3793
查看次数

飞快指数查看器

我正在使用haystack和whoosh作为Django app的后端.

有没有办法查看whoosh生成的索引的内容(以易于阅读的格式)?我想看看哪些数据被编入索引,以及如何更好地理解它是如何工作的.

python whoosh django-haystack

14
推荐指数
2
解决办法
4517
查看次数

django haystack突出显示模板标签问题

有没有办法让django-haystack的{% highlight %}模板标签显示传入的完整变量,而不是在第一次匹配之前删除所有内容?

我这样使用它:

{% highlight thread.title with request.GET.q %}
Run Code Online (Sandbox Code Playgroud)

django django-haystack

14
推荐指数
1
解决办法
1808
查看次数

Django haystack EdgeNgramField给出了与弹性搜索不同的结果

我目前正在运行带有弹性搜索后端的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)

python django django-haystack elasticsearch

13
推荐指数
2
解决办法
3973
查看次数

Django干草堆飞快超级慢

我有一个简单的设置与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,它给了我这个信息:

Django调试工具栏分析器结果

据我所知,问题在于haystack/query:779::__getitem__,它被击中两次,每次耗费1.5秒.我浏览过有问题的代码,但无法理解它.那么我从哪里开始呢?

python django profiling whoosh django-haystack

13
推荐指数
1
解决办法
967
查看次数

Haystack说"无法找到SearchResult的模型"

将我的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 &amp; 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)

python django solr nginx django-haystack

13
推荐指数
1
解决办法
1008
查看次数