2014-12-26 4 views
1

Я использую Хейстек 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

Если значение number_of_fragments установлено равным 0, то ни фрагментов не производится, вместо того, чтобы все содержимое поля возвращается, и конечно она выделена. Это может быть очень удобно, если короткие тексты (например, название документа или адрес) необходимо выделить, но фрагментация не требуется . Обратите внимание, что в этом случае ign_size игнорируется.

От

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

Вы должны видеть, как изменить этот параметр в стоге сена.

+0

так, 'number_of_fragments', кажется, '0', и из-за этого ElasticSearch возвращается только 1 поле? Спасибо за то, что указали мне в хорошем направлении, я собираюсь погрузиться в документацию Haystack. – AlvaroAV

+0

Несомненно, я предполагаю, что он должен быть там в вызове функции highlight() –

+0

Документация Haystack говорит, что вызов функции подсветки не получает никаких аргументов ! Но спасибо, что помогли мне понять, почему это происходит! – AlvaroAV

0

Мое временное решение прямо сейчас, чтобы сделать цикл и добавить изюминку вручную в поле, как это:

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) 
0

Немного поздно, но если вы хотите передать дополнительные PARAMS подчеркнуть, Вам нужно пройти Dict из любой PARAMS elasticsearch хотел бы для функции выделения, например, так:

# Solr example since I'm not familiar with ES 
sqs = SearchQuerySet().filter(content='foo').highlight(**{'hl.fl': 'short_description') 
Смежные вопросы