Python подсветка searchValue в текстовом поле - PullRequest
0 голосов
/ 06 сентября 2018

Я следил за этим руководством , о поиске django.

search_value = request.query_params['searchvalue']

documents = Document.objects.filter(
    raw_text__icontains=search_value
).values_list('doc_id', flat=True)

return documents

Получает список идентификаторов документов на основе значения поиска. Но в некоторых объектах документа текстовое поле raw_text включает значение search_value более одного раза. Но я все равно получаю doc_id только один раз.

Есть ли способ получить doc_id для каждого попадания в фильтре?

1 Ответ

0 голосов
/ 13 сентября 2018

Мне не удалось решить эту проблему с помощью фильтра. Поэтому я искал результаты поиска в Google и нашел PostgreSQL Text Search .

Этот поиск выполняется по текстовому полю и возвращает фрагменты этого текста. И выделите search_values.

Мой окончательный код выглядит так:

    search_value = request.query_params['searchvalue']

    queryset = Document.objects.extra(
        select={
            'snippet': (
                "ts_headline(raw_text, plainto_tsquery(%s), "
                "'StartSel=*,StopSel=*,MaxFragments=2,"
                "FragmentDelimiter=...,MaxWords=8,MinWords=1')"
            ),
        },
        where=["search @@ plainto_tsquery(%s)"],
        params=[search_value],
        select_params=[search_value, search_value]
    )

    return Response(queryset.values('id', 'title', 'snippet', 'doc_number'))

Надеюсь, это поможет другим:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...