Whoosh + django-haystack缺少搜索结果

时间:2015-03-24 15:01:49

标签: python django postgresql django-haystack whoosh

我正在玩一个相对简单的Whoosh 2.6和django-haystack 2.3.1的实现来搜索"联系"对象。但是,搜索" mary"只返回我的许多人中的一小部分" Mary"联系人。以下是相关文件:

search_indexes.py

from django.db.models import Q
from haystack import indexes
from apps.contact.models import Contact

class ContactIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    full_name = indexes.CharField(model_attr='full_name', null=True)
    email = indexes.CharField(model_attr='email', null=True)
    phone = indexes.CharField(model_attr='phone', null=True)
    content_auto = indexes.NgramField(use_template=True)
    # several more indexed=False fields to avoid db hits later

    def get_model(self):
        return Contact

    def index_queryset(self, **kwargs):
        # one of full_name, email, phone has to be non-null   
        return self.get_model().objects.filter(
            Q(full_name__isnull=False) | Q(email__isnull=False) | Q(phone__isnull=False))

    def get_updated_field(self):
        return 'date_modified'

contact_text.txt和contact_content_auto.txt(两者都相同)

{% if object.full_name %}{{ object.full_name }}{% else %}{% endif %}
{% if object.email %}{{ object.email }}{% else %}{% endif %}
{% if object.phone %}{{ object.phone }}{% else %}{% endif %}

views.py

def search(request):
    sqs = SearchQuerySet()
    form = SearchForm(request.POST, searchqueryset=sqs, load_all=False)
    if form.is_valid():
        return form.search()

相关说明:

  • 为简单起见,省略了一些代码
  • 模板有if语句,以便删除单词" None"在搜索索引中
  • 目前,我的所有Contact对象都有一个有效的full_name
  • 没有任何模式与#34; mary"返回结果并且不会:select count(*) from contact_contact where lower(full_name) like '%mary%';返回97行,而搜索只返回5行。 同样,对于483" john"联系人,搜索返回19。
  • 使用Python 2.7,Django 1.5和Postgres 8.4

0 个答案:

没有答案