Как я могу заставить ElasticSearch выдавать только первые пару слов для поля? - PullRequest
0 голосов
/ 04 ноября 2019

Я использую ElasticSearch для запроса набора довольно длинных документов. Каждый документ имеет (помимо прочего) заголовок, URL-адрес и тело.

При представлении результатов пользователю я хотел бы представить только «аннотацию» каждого документа (вместе с заголовком). и URL). Однако возвращение всего тела только для его обрезки на стороне клиента кажется расточительным.

Увы, у меня нет выделенного «абстрактного» поля или чего-то подобного. Поэтому мне интересно: есть ли способ заставить ElasticSearch выдавать только начало (например, первые 200 слов) поля 'body' для каждого удара? Я посмотрел на исходную фильтрацию (которую я уже использую в своих запросах), но, похоже, просто выбирает / отменяет выбор отдельных полей для ответа. Я скорее ищу способ преобразования возвращаемых данных.

1 Ответ

0 голосов
/ 04 ноября 2019

Похоже, что Поля скрипта являются одним из способов решения этой проблемы. Вот пример запроса, который получает поля title, uri и сценарий (!) abstract для каждого документа. abstract состоит из первых 200 букв поля content:

{
    "query": {
        "match": {
            "title": "Scripting"
        },
    },
    "_source": ["title", "uri"],
    "script_fields": {
        "abstract": {
            "script": {
                "lang": "painless",
                "source": "params['_source'].content.substring(0, 200)"
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...