Выделение полного поля без фрагментов с помощью Java API не работает - Версия ES 0.18.6 - PullRequest
3 голосов
/ 24 февраля 2012

У меня есть простая проблема озвучивания, связанная с выделением поля с помощьюasticsearch версии 0.18.6.То, что я хочу сделать, это выделить целое поле и вернуть содержимое (либо выделенное, либо, если совпадений нет, но без выделения - но всегда полное содержимое поля!)

On asticsearch.org Я нашел это:

Если значение number_of_fragments установлено в 0, то никакие фрагменты не создаются , вместо этого возвращается все содержимое поля и, конечно, это выделено.

Итак, я попытался достичь желаемого:

  final SearchResponse response = client.prepareSearch(indexName)
                .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                .setTypes(FEED_TYPE)
                .setQuery(queryString(query).field("title").field("description").field("keywords"))
                .addHighlightedField("title", 0, 0)
                .addHighlightedField("description", 0, 0)
                .addFields("url", "iconUrl", "keywords")
                .setSize(size)
                .setFrom(start)
                .execute().actionGet();

Подпись этого метода:

 public SearchRequestBuilder addHighlightedField(java.lang.String name, int fragmentSize, int numberOfFragments)

Я что-то здесь пропускаю?Или я неправильно понял, что он возвращает полный контент, только если есть хотя бы один термин, который нужно выделить?

Спасибо за все ответы.

1 Ответ

3 голосов
/ 27 февраля 2012

Не думаю, что сейчас можно достичь именно того, чего вы хотите. Коллекция highlightFields содержит только те поля, которые были выделены. Вы можете сделать что-то вроде этого:

final SearchResponse response = client.prepareSearch(indexName)
            .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
            .setTypes(FEED_TYPE)
            .setQuery(queryString(query).field("title").field("description").field("keywords"))
            .addHighlightedField("title", 0, 0)
            .addHighlightedField("description", 0, 0)
            .addFields("title", "description", "url", "iconUrl", "keywords")
            .setSize(size)
            .setFrom(start)
            .execute().actionGet();

Он всегда вернет вам все поля в

response.hits().getAt(i).fields();

и поля, выделенные в

response.hits().getAt(i).highlightFields();

При отображении результатов вы можете сначала проверить функцию highlightFields (), а если там нет поля, использовать вместо нее fields ().

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