代码之家  ›  专栏  ›  技术社区  ›  schneck

搜索多个字段

  •  3
  • schneck  · 技术社区  · 16 年前

    我觉得我不能正确地站在姜戈干草堆上:

    我有一个包含多个字段的数据模型,我需要搜索其中两个字段:

    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()
    

    但当我执行搜索时,只搜索“用户名”字段;忽略“twitter帐户”。当我通过dbshell选择搜索结果时,对象包含“user”和“twitter_account”的正确值,但结果页面显示“no results”(无结果):

        {% 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 %}
    

    有什么想法吗?

    1 回复  |  直到 8 年前
        1
  •  9
  •   Community Mohan Dere    8 年前

    我想这是因为Haystack使用文档字段进行常规搜索,除非您为其他字段(如Twitter帐户字段)定义特定搜索。

    from haystack documentation

    每个搜索索引都需要 一个(并且只有一个)字段 文档=真。这表明两者都是 干草堆和搜索引擎关于 哪个字段是主字段 在里面搜索。

    尝试如下指定索引

    class UserProfileIndex(SearchIndex):
        text = CharField(document=True, use_template=True)
        user = CharField(model_attr='user')
        twitter_account = CharField(model_attr='twitter_account')
    

    创建一个名为 搜索/索引//用户配置文件\u text.txt

    其中将包含以下内容

    {{ object.user.get_full_name }}
    {{ object.twitter_account}}
    

    现在,当您不指定索引过滤器时,Haystack将搜索这个文件的内容(您可以在其中添加您想要的任何内容)。