【问题标题】:Searching (Filtering) on multi models using drf-haystack searchindex and elasticsearch使用 drf-haystack searchindex 和 elasticsearch 在多模型上搜索(过滤)
【发布时间】:2017-03-18 08:27:56
【问题描述】:

我一直在尝试使用 rdf-haystack 过滤器实现多个模型,但它不起作用。这是我的例子: 我有两个模型 search_indexes.py

class PersonSkillIndex(indexes.SearchIndex, indexes.Indexable):
   text = indexes.CharField(document=True, use_template=True)
   person_name = indexes.CharField(model_attr='person_id')
   skill_name = indexes.EdgeNgramField(model_attr='skill_id')

   autocomplete = indexes.EdgeNgramField()
   @staticmethod

   def prepare_autocomplete(obj):
   return " ".join((obj.skill_id.name)) 

   def get_model(self):
   return PersonSkill

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

   def prepare_person_id(self, obj):
   return obj.person_id.name

   def prepare_skill_id(self, obj):
   return obj.skill_id.name

class PersonPositionIndex(indexes.SearchIndex, indexes.Indexable):
   text = indexes.CharField(document=True, use_template=True)
   person_name = indexes.CharField(model_attr='person_id')
   position_name = indexes.EdgeNgramField(model_attr='position_id')
   autocomplete = indexes.EdgeNgramField()

   @staticmethod
   def prepare_autocomplete(obj):
   return " ".join(( obj.position_id.title)) 

   def get_model(self):
   return PersonPosition 

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

   def prepare_person_id(self, obj):
   return obj.person_id.name

   def prepare_position_id(self, obj):
   return obj.position_id.name

我想使用以下 searchQuerySet 搜索 PersonSkill 和 PersonPosition 模型:

http://localhost:8000/en/api/profiles/search/?skill_name=python&position_name=programmer

Haytack 过滤器是否支持此功能?如果有任何建议将受到欢迎! 谢谢

【问题讨论】:

    标签: django-haystack


    【解决方案1】:

    请通过

    http://drf-haystack.readthedocs.io/en/latest/09_multiple_indexes.html

    这篇文章描述了一种与您正在寻找的方式相似的方式。

    基本上你可以在'index_classes'属性中指定一个索引列表。

    当您的搜索引擎已为多个模型编制索引并且您希望提供两个或多个模型的汇总结果时,这会很有用。要使用默认的多索引支持,只需在 index_classes 列表中添加多个索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      相关资源
      最近更新 更多