我正在使用 Haystack 2.3.0 ,我的搜索索引如下:
class MyModelIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
name = indexes.EdgeNgramField(model_attr='name', boost=1.250)
short_description = indexes.CharField(model_attr='short_description', null=True, boost=1.125)
description = indexes.CharField(model_attr='description', null=True, boost=1.125)
detail_description = indexes.CharField(model_attr='detail_description', null=True)
def get_model(self):
return MyModel
我只想突出显示字段 detail_description
。我在official documentation这个例子中读过:
sqs = SearchQuerySet().filter(content='foo').highlight()
result = sqs[0]
result.highlighted['text'][0]
但是当我尝试这样做时,我得不到同样的结果。在上面的示例中,result.highlighted
似乎是字典,您可以在其中访问每个字段的重点:
result.highlighted['text'][0]
但在我的例子中,当我这样做时,result.highlighted
不是字典,它是一个列表,只返回text
字段的突出显示。
答案 0 :(得分:3)
如果number_of_fragments值设置为0,则没有片段 生成,而是返回该字段的全部内容,并且 当然它是突出的。如果短文本(如。),这可能非常方便 文档标题或地址)需要突出显示但没有碎片 是必须的。请注意,在这种情况下会忽略fragment_size。
这
您需要了解如何在haystack中更改此参数。
答案 1 :(得分:0)
我现在的临时解决方案是执行for循环并手动将高亮显示添加到字段中,如下所示:
for result in sqs:
highlight = Highlighter(my_query) # my_query has the word(s) of the query
result.detail_description = highlight.highlight(result.detail_description)
答案 2 :(得分:0)
这里有点晚了,但是如果你想传递额外的参数来突出显示,你需要传递一个关于弹性搜索想要用于高亮函数的任何参数的字典,如下所示:
# Solr example since I'm not familiar with ES
sqs = SearchQuerySet().filter(content='foo').highlight(**{'hl.fl': 'short_description')