干草堆:只突出显示一个字段

时间:2014-12-26 09:43:06

标签: django elasticsearch highlight django-haystack

我正在使用 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字段的突出显示。

  • 如何将突出显示设置为具体字段?

3 个答案:

答案 0 :(得分:3)

  

如果number_of_fragments值设置为0,则没有片段   生成,而是返回该字段的全部内容,并且   当然它是突出的。如果短文本(如。),这可能非常方便   文档标题或地址)需要突出显示但没有碎片   是必须的。请注意,在这种情况下会忽略fragment_size。

LINK - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-highlighting.html

您需要了解如何在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')