干草堆搜索无法使用autocomp

2024-10-03 11:26:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用django haystack在我们的产品中搜索功能。当用户输入任何搜索关键字(即“计算机”)时,应针对多个字段搜索该关键字。E、 当用户输入“计算机”时,它应该在该对象的任何字段中找到“计算机”所在的对象。但是有一个问题。若用户只在搜索字段中输入“Comp”,那个么它根本就找不到对象。在

所以我尝试使用自动完成功能。使用自动完成功能,我只能在一个字段中实现这一点。对于其他字段,则返回失败的结果。在

我有草垛和呼呼作为后端。在

环境细节:
Django v1.5.3版
Haystack v2.1.0
Whoosh v2.5.3版

以下是在我的搜索中定义的_索引.py文件。在

class Message_Index(indexes.SearchIndex, indexes.Indexable):
    text = indexes.EdgeNgramField(document=True, use_template=True)
    message = indexes.CharField(model_attr='messagetext', null=True)
    forum = indexes.CharField(model_attr='forum', null=True)
    status = indexes.CharField(model_attr='status', null=True)
    tags = indexes.CharField(model_attr='tags', null=True)
    author_name = indexes.EdgeNgramField(null=True)
    author_number = indexes.EdgeNgramField(null=True)
    message_date = indexes.DateTimeField(null=True)

    def get_model(self):
        return Message

    def index_queryset(self, using=None):
        return self.get_model().objects.all()

    def prepare_author_name(self, obj):
        return obj.message.user.name

    def prepare_author_number(self, obj):
        return obj.message.user.number

    def prepare_message_date(self, obj):
        return obj.message.date

    def prepare_tags(self, obj):
        return [tag.tag for tag in obj.tags.all()]

    def prepare_message_thread(self, obj):
        return obj.message.thread

我试图通过以下方式进行搜索:

当我试图用search_keyword='user1'进行搜索时,它返回正确的结果,但是当我输入search_keyword='223'时,它不会返回任何结果。在

^{pr2}$

组合结果集是函数,定义如下:

def combined_resultsets(resultset1, resultset2, sortby):
    if sortby is not None:
        resultset1 = sorted(chain(resultset1, resultset2),key=attrgetter(sortby))
    else:
        resultset1 = chain(resultset1, resultset2)

有人能帮我吗?在


Tags: selftrueobjmessagemodelreturndeftags