Как предотвратить сохранение одного поля в _source? - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть модель, доступная для поиска через Hibernate Search 5.6.5 и Elasticsearch 2.4.6.

@Entity
@Indexed
class Model {

     @Field
     String normalField;

     @Field
     @Lob
     String reallyBigField;
}

Я не хочу, чтобы Elasticsearch хранил reallyBigField. Hibernate Search предоставляет свойство @Field(store = Store.NO), но это значение по умолчанию, и похоже, что Elasticsearch будет обрабатывать свойство хранилища иначе, чем Lucene (Lucene ничего не хранит, Elasticsearch имеет отдельный источник-хранилище).

Ответы [ 2 ]

0 голосов
/ 12 августа 2019

Решение может быть основано на JsonViews для настройки сопоставителя ElasticSearch на игнорирование некоторых полей, помеченных другим представлением, которые могут использоваться для вывода покоя: Игнорировать JsonIgnore в Elasticsearch

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

Использование Store.NO отключает хранилище на уровне поля. Хранение на уровне поля, которое в действительности не используется в текущей интеграции Search 5.x Elasticsearch.

Вы правы, что Elasticsearch дополнительно хранит контент в отдельном поле _source, и именно это мы используем сейчас для проекций в Hibernate Search (из-за некоторых ограничений Elasticsearch - мы могли бы добиться большего в будущем) .

Вы можете отключить это конкретное поле в _source, изменив отображение: https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#include-exclude. Но мы не поддерживаем его "из коробки", поэтому вам придется делать это вручную.

...