3

所以这对某些人来说可能是一个明显的答案,但我不确定正确的答案是什么。我有一个简单的捐赠应用程序,其中捐赠者对象是通过表单创建的。要添加的一项功能是允许按姓氏和/或电话号码搜索每个捐赠者。

这是使用 django-haystack 的好案例还是我应该创建自己的过滤器?我可能会看到 haystack 的问题是每分钟都会提交一些捐款,所以索引可能是个问题吗?目前大约有 130,000 条记录并且还在增长。我已经开始实施 haystack,但意识到它可能没有必要?

4

1 回答 1

4

不要使用 haystack——当底层关系数据库无法轻松处理时,它用于快速全文搜索。haystack 的用例是当您存储许多包含大量文本的大型文档时,您希望通过文档中的单词对其进行索引,以便您可以轻松搜索。

默认情况下,Django 已经允许您轻松索引/搜索文本记录。例如,使用管理后台只需指定搜索字段,您就可以轻松搜索姓名或电话号码。(它通常会进行不区分大小写的包含搜索——这将找到部分匹配项;例如,如果您仅搜索“doe”或“ohn”,则会出现名称“John Doe”)。

因此,如果您的 models.py 有:

class Donor(models.Model):
    name = models.CharField(max_length=50)
    phone = models.CharField(max_length=15)

和一个 admin.py :

from django.contrib import admin
from mysite.myapp.models import Donor

class DonorAdmin(admin.ModelAdmin):
    model = Donor
    search_fields = ['name', 'phone']

admin.site.register(Donor, DonorAdmin)

它应该可以正常工作。如果需要改进,请考虑将全文索引添加到底层 RDBMS。例如,使用 postgres,您可以在 8.3 后创建一个文本搜索索引,在底层数据库中使用一个衬里,django 应该自动使用它:http://www.postgresql.org/docs/8.3/static/textsearch-indexes。 html

于 2012-11-02T19:08:50.787 回答