使用elasticsearch(2.x),django-haystack(2.8.0),drf-haystack(1.8.6)我正在建立搜索。一切工作正常,除了我无法同时搜索多个字段。现在,我只能搜索(url)/search/?title=test
和/search/?text=test
之类的特定字段。每个url都以正确的结果响应,但仅针对指定的字段。
期望的结果是/search/?q=test
返回标题和文本的两个匹配,以包含搜索查询“ test ”。
下面,我为搜索到的模型添加了搜索索引。
class ModelIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
title = indexes.CharField(model_attr='title', boost=2.5)
slug = indexes.CharField(model_attr='slug')
site_id = indexes.IntegerField()
def get_model(self):
return Model
def prepare_text(self, obj):
return obj.text
def prepare_site_id(self, obj):
return obj.site.id
def index_queryset(self, using=None):
# Used when the entire index for model is updated.
return self.get_model().objects.all().filter(date__lte=datetime.datetime.now())
答案 0 :(得分:0)
我使用包含标题和文本字段的模板解决了该问题。 范例(model_text.txt):
{{object.title}}
{{object.text}}
因此,文本字段包含一个字符串,其两个字段均具有其值,因此在进行类似/search/?text=test
的搜索时都会被搜索。