python - Haystack 对多对多字段的搜索不起作用

标签 python django django-models django-haystack whoosh

我正在尝试对具有多对多字段的模型运行搜索,并且我想使用该字段过滤搜索。

这是我当前的代码:

搜索索引.py

class ListingInex(indexes.SearchIndex, indexes.Indexable):
   text = indexes.CharField(document=True, use_template=True)
   business_name = indexes.CharField(model_attr='business_name')
   category = indexes.MultiValueField(indexed=True, stored=True)
   city = indexes.CharField(model_attr='city')
   neighborhood= indexes.CharField(model_attr='neighborhood')
   state = indexes.CharField(model_attr='state')
   address = indexes.CharField(model_attr='address')
   zip_code = indexes.CharField(model_attr='zip_code')
   phone_number = indexes.CharField(model_attr='phone_number')

    def get_model(self):
          return listing

    def index_queryset(self, using=None):
      return self.get_model().objects.all()

    def prepare_category(self, obj):
       return [category.name for category in obj.category_set.all()]

listing_text.txt

{{ object.business_name }}
{{ object.state }}
{{object.city}}
{{object.zip_code}}
{{object.phone_number}} 
{{object.neighborhood}}
{% for category in obj.category.all %}
{{ category.name }}
{% endfor %}

我正在尝试进行简单的搜索,例如:

search_results = SearchQuerySet().filter(category=query_text).filter

它返回一个空列表。提前致谢。

最佳答案

阅读您的代码我认为问题出在这里:

{% for category in obj.category.all %}
{{ category.name }}
{% endfor %}

Category 不是一个对象,是一个MultiValueField。也许如果你尝试这样的事情:

{% for category in object.category.all %}
{{ category.name }}
{% endfor %}

object.category.all 而不是 obj.category.all。我不确定解决方案是这个,但我很确定错误可能出在这 3 行中。

关于python - Haystack 对多对多字段的搜索不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19264687/

相关文章:

python - AllenNLP 中可分解注意力模型的微调问题

django - 在共享托管环境中为 Django 1.5 提供静态管理文件

python - 从 settings.py 文件夹内的应用程序设置 AUTH_USER_MODEL

python - 无法使用 MEDIA_ROOT 和 MEDIA_URL 在 Django 中上传图片

python - 从 ORM 中提取数据并按日期分组

python - 在Django自定义用户管理器中,create_user和_create_user()之间的区别?

python - 通过 scipy.io.loadmat 将 matlab 3D 矩阵传输到 python 3D 数组会出错

python - 将tensorflow BERT检查点转换为pytorch时出错

Python:接下来几个月的工作日位置

python - Django:按值过滤或返回所有记录