所以这对某些人来说可能是一个明显的答案,但我不确定答案是什么。我有一个简单的捐赠应用程序,其中Donor对象通过表单创建。要添加的功能是允许按姓氏和/或电话号码搜索每个捐助者。
这是使用django-haystack的好例子还是我应该创建自己的过滤器?我可能会看到干草堆的问题是每分钟都会提交一些捐款,因此索引可能会成为一个问题吗?目前有大约130,000条记录并且还在增长。我已经开始实施干草堆,但已经意识到它可能没有必要?
答案 0 :(得分:4)
当底层关系数据库无法轻松处理时,不要使用haystack - 这是快速全文搜索。 haystack的用例是当你存储许多大文档时,你需要通过文档中的单词索引大量文本,这样你就可以轻松搜索。
默认情况下,Django已经允许您轻松索引/搜索文本记录。例如,使用admin backend simply specify search fields,您可以轻松搜索姓名或电话号码。 (并且它通常会不区分大小写包含搜索 - 这将找到部分匹配;例如,如果您只搜索“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