简体   繁体   中英

Search over multiple fields

I think I don't unterstand django-haystack properly:

I have a data model containing several fields, and I would to have two of them searched:

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True, default=None)
    twitter_account = models.CharField(max_length=50, blank=False)

My search index settings:

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

But when I perform a search, only the field "username" is searched; "twitter_account" is ignored. When I select the Searchresults via dbshell, the objects contain the correct values for "user" and "twitter_account", but the result page shows a "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 %}

Any ideas?

I guess thats because haystack uses the document field for generic searches unless you define a specific search for other fields like the twitter_account field.

from haystack documentation

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.

Try specifing the index as follows

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

and create the a file named search/indexes//userprofile_text.txt

which will contain the following

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

now haystack will search in the contents of this file (where you can add whatever you want) when you don't specify an index filter.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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