python – 搜索多个字段
作者:互联网
我想我不会正确地解读django-haystack:
我有一个包含几个字段的数据模型,我想搜索其中两个:
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True, default=None)
twitter_account = models.CharField(max_length=50, blank=False)
我的搜索索引设置:
class UserProfileIndex(SearchIndex):
text = CharField(document=True, model_attr='user')
twitter_account = CharField(model_attr='twitter_account')
def get_queryset(self):
"""Used when the entire index for model is updated."""
return UserProfile.objects.all()
但是当我执行搜索时,只搜索字段“username”; “twitter_account”被忽略.当我通过dbshell选择Searchresults时,对象包含“user”和“twitter_account”的正确值,但结果页面显示“无结果”:
{% if query %}
<h3>Results</h3>
{% for result in page.object_list %}
<p>
<a href="{{ result.object.get_absolute_url }}">{{ result.object.id }}</a>
</p>
{% empty %}
<p>No results</p>
{% endfor %}
{% endif %}
有任何想法吗?
解决方法:
我想这是因为haystack使用文档字段进行通用搜索,除非你定义了对twitter_account字段等其他字段的特定搜索.
Every SearchIndex requires there be
one (and only one) field with
document=True. This indicates to both
Haystack and the search engine about
which field is the primary field for
searching within.
尝试指定索引如下
class UserProfileIndex(SearchIndex):
text = CharField(document=True, use_template=True)
user = CharField(model_attr='user')
twitter_account = CharField(model_attr='twitter_account')
并创建一个名为的文件
搜索/索引// userprofile_text.txt
其中包含以下内容
{{ object.user.get_full_name }}
{{ object.twitter_account}}
现在,当您没有指定索引过滤器时,haystack将搜索此文件的内容(您可以在其中添加任何内容).
标签:django-haystack,python,django 来源: https://codeday.me/bug/20190724/1518710.html