繁体   English   中英

Django Haystack在同一模型的多个字段上的索引

[英]Django Haystack index on multiple fields from same model

我正在尝试使用django-haystack将elasticsearch嵌入我的Django应用程序中。 我正在尝试实施用户搜索。 我的用户模型是这样的:

class MyUser(AbstractBaseUser):
    username = models.CharField(max_length=255, unique=True)
    name = models.CharField(max_length=63, blank=True)
    email = models.EmailField(blank=True, unique=True)
    status = models.CharField(max_length=255, blank=True, null=True)
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    joined = models.DateTimeField(auto_now_add=True, null=True)

现在,我想搜索nameusername name段。 我创建了以下search_indexes.py

class UserIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.EdgeNgramField(document=True, model_attr='name')
    username = indexes.CharField(model_attr='username')

    def get_model(self):
        return MyUser

    def get_updated_field(self):
        return "joined"

但是,执行搜索时,只会得到与name字段匹配的结果。 我在这里做错了什么? 还有其他方法吗?

提前致谢。

django-haystack的工作方式是: document=True字段中的数据用于常规搜索,而其他字段则用于单个过滤。 因此,在您的情况下,搜索将仅使用name字段。 要解决此问题,您需要使用一个模板,该模板指定要在搜索中使用的所有字段。 首先,使用:

text = indexes.EdgeNgramField(document=True, use_template=True)

然后,您需要在模板目录内创建一个名为search/indexes/myapp/myuser_text.txt的新模板,并将以下内容放入其中:

{{ object.username }}
{{ object.name }}

有关完整参考,请参见http://django-haystack.readthedocs.org/en/latest/tutorial.html#handling-data

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM