Поиск над несколькими полями
-
02-10-2019 - |
Вопрос
Я думаю, что я не имею в виду 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()
Но когда я выполняю поиск, ищется только поле «Имя пользователя»; «Twitter_account» игнорируется. Когда я выбираю SearchResults через DBSHELL, объекты содержат правильные значения для «пользователя» и «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.
Каждый поиск должен быть один (и только одно) поле с документом = TRUE. Это указывает на обе сена HayStack, так и поисковой системе, о которой поле является основным полем для поиска внутри.
Попробуйте уточнить индекс следующим образом
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 будет искать в содержимом этого файла (где вы можете добавить все, что вы хотите), когда вы не указываете индексный фильтр.