gpt4 book ai didi

python - 来自同一模型的多个字段的 Django Haystack 索引

转载 作者:太空宇宙 更新时间:2023-11-03 15:09:49 25 4
gpt4 key购买 nike

我正在尝试使用 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 字段。我创建了以下 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完整引用

关于python - 来自同一模型的多个字段的 Django Haystack 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28272214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com