5.X/8. Breaking Changes

v5.0-03. Percolator changes

drscg 2017. 10. 23. 21:22

Percolator is near-real timeedit

Previously percolators were activated in real-time, i.e. as soon as they were indexed. Now, changes to the percolate query are visible in near-real time, as soon as the index has been refreshed. This change was required because, in indices created from 5.0 onwards, the terms used in a percolator query are automatically indexed to allow for more efficient query selection during percolation.

이전에는 percolator가 실시간(real-time)으로, 즉 index되자 마자 활성화되었습니다. 이제 percolatequery에 대한 변경 사항은 index가 refresh되자 마자 거의 실시간(near-real time) 으로 표시된다. 5.0 이후에 생성된 indices에서 percolator query에 사용된 용어가 자동으로 index되어 percolation 중 더 효율적인 query 선택을 허용하기 때문에 이 변경이 필요했습니다.

Percolate and multi percolator APIsedit

Percolator and multi percolate APIs have been deprecated and will be removed in the next major release. These APIs have been replaced by the percolate query that can be used in the search and multi search APIs.

percolator 및 다중 percolate API는 deprecate되었고 다음 major release에서 제거될 예정이다. 이러한 API는 search 및 multi search API에서 사용될 수있는 percolate query로 대체되었다.

Percolator field mappingedit

The .percolator type can no longer be used to index percolator queries.

.percolator type은 percolator query를 index하는데 사용될 수 없다.

Instead a percolator field type must be configured prior to indexing percolator queries.

대신에, percolator query를 index하기 전에 percolator field type을 설정해야 한다.

Indices with a .percolator type created on a version before 5.0.0 can still be used, but new indices no longer accept the .percolator type.

5.0.0 이전 version에서 생성된 .percolator type의 index는 여전히 사용 가능하다. 새로운 indices는 더 이상 .percolator type을 허용하지 않는다.

However it is strongly recommended to reindex any indices containing percolator queries created prior upgrading to Elasticsearch 5. By doing this the percolate query utilize the extracted terms the percolator field type extracted from the percolator queries and potentially execute many times faster.

그러나, Elasticsearch 5로 upgrade하기 전에 생성된 percolator query를 포함하는 모든 index를 다시 index하는 것을 추천한다. 이렇게 하면 percolate query가 추출된 용어를 사용하여 percolator query에서 추출된 percolator field type이 잠재적으로 여러 번 빠르게 실행된다.

Percolate document mappingedit

The percolate query no longer modifies the mappings. Before the percolate API could be used to dynamically introduce new fields to the mappings based on the fields in the document being percolated. This no longer works, because these unmapped fields are not persisted in the mapping.

percolate query는 더 이상 mapping을 변경하지 않는다. 이전에는 percolate API를 사용하여 percolate된 document의 field를 기반으로 새로운 field를 mapping에 동적으로 도입할 수 있었다. 이러한 mapping되지 않은 field는 mapping에서 유지되지 않으므로, 이것은 더 이상 동작하지 않습니다.

Percolator documents returned by searchedit

Documents with the .percolate type were previously excluded from the search response, unless the .percolate type was specified explicitly in the search request. Now, percolator documents are treated in the same way as any other document and are returned by search requests.

이전 version에서 .percolate type을 가진 document는, .percolate type이 명시적으로 지정되지 않았다면, search response에서 제외되었다. 이제, percolator document는 다른 document와 동일한 방식으로 취급되며 search request에 의해 return된다.

Percolating existing documentedit

When percolating an existing document then also specifying a document as source in the percolatequery is not allowed any more. Before the percolate API allowed and ignored the existing document.

기존 문서를 percolate할 경우 때 percolate query에서 문서를 document으로 지정하는 것도 더 이상 허용되지 않는다. 이전에는 percolate API가 기존 문서를 허용했고 무시했다.

Percolate Statsedit

The percolate stats have been removed. This is because the percolator no longer caches the percolator queries.

percolate 통계가 제거되었다. 이것은 percolator가 percolator query를 더 이상 cache하지 않기 때문이다.

Percolator queries containing range queries with now rangesedit

The percolator no longer accepts percolator queries containing range queries with ranges that are based on current time (using now).

percolator는 now 를 사용하여 현재 시간에 기반한 범위를 가진 range query를 포함하는 percolator query를 더 이상 받아들이지 않는다.

Percolator queries containing scripts.edit

Percolator queries that contain scripts (For example: script query or a function_score query script function) that have no explicit language specified will use the Painless scripting language from version 5.0 and up.

명시적인 언어가 지정되지 않은 script (예 : script query 또는 function_score query script 함수)를 포함하는 percolator query는 version 5.0 이상의 painless script 언어를 사용한다.

Scripts with no explicit language set in percolator queries stored in indices created prior to version 5.0 will use the language that has been configured in the script.legacy.default_lang setting. This setting defaults to the Groovy scripting language, which was the default for versions prior to 5.0. If your default scripting language was different then set the script.legacy.default_lang setting to the language you used before.

version 5.0 이전에 생성된 indices에 저장된 percolator query에 명시적인 언어가 설정되지 않은 script는script.legacy.default_lang 설정에서 구성된 언어를 사용한다. 이 설정의 기본값은 Groovy script 언어이다. 이 언어는 5.0 이전 version의 기본값이다. 기본 script 언어가 다른 경우 script.legacy.default_lang 설정을 이전에 사용한 언어로 설정하자.

In order to make use of the new percolator field type all percolator queries should be reindexed into a new index. When reindexing percolator queries with scripts that have no explicit language defined into a new index, one of the following two things should be done in order to make the scripts work:

새로운 percolator field type을 사용하려면 모든 percolator query를 새로운 index로 다시 index해야 한다. 명시적인 언어가 정의되지 않은 script를 사용하여 percolator query를 다시 index할 경우, script가 동작하려면, 다음 두 가지 중 하나를 수행해야 한다.

  • (Recommended approach) While reindexing the percolator documents, migrate the scripts to the Painless scripting language.

    (권장 방법) percolator document를 다시 색인하는 동안 스크립트를 painless script 언어로 migration.

  • or add lang parameter on the script and set it the language these scripts were written in.

    또는 script에 lang parameter를 추가하고 이 script가 작성된 언어로 설정하자.

Java clientedit

The percolator is no longer part of the core elasticsearch dependency. It has moved to the percolator module. Therefor when using the percolator feature from the Java client the new percolator module should also be on the classpath. Also the transport client should load the percolator module as plugin:

percolator는 더 이상 core elasticsearch dependency의 일부가 아니다. 그것은 percolator module로 옮겨졌다. 따라서 Java client의 percolator 기능을 사용할 때 새로운 percolator module도 classpath에 있어야 한다. 또한 transport client는 percolator module을 plugin으로 load해야 한다.

TransportClient transportClient = TransportClient.builder()
        .settings(Settings.builder().put("node.name", "node"))
        .addPlugin(PercolatorPlugin.class)
        .build();
transportClient.addTransportAddress(
        new InetSocketTransportAddress(new InetSocketAddress(InetAddresses.forString("127.0.0.1"), 9300))
);

The percolator and multi percolate related methods from the Client interface have been removed. These APIs have been deprecated and it is recommended to use the percolate query in either the search or multi search APIs. However the percolate and multi percolate APIs can still be used from the Java client.

Client interface에서 percolator와 multi percolate 관련 method는 제거되었다. 이 API는 deprecate되었고, search 또는 multi search API에서 percolate query를 사용하는 것을 추천한다. 그러나 percolate 및 multi percolate API는 여전히 Java client에서 사용할 수 있다.

Using percolate request:

percolate request를 사용하면:

PercolateRequest request = new PercolateRequest();
// set stuff and then execute:
PercolateResponse response = transportClient.execute(PercolateAction.INSTANCE, request).actionGet();

Using percolate request builder:

percolate request builder를 사용하면:

PercolateRequestBuilder builder = new PercolateRequestBuilder(transportClient, PercolateAction.INSTANCE);
// set stuff and then execute:
PercolateResponse response = builder.get();

Using multi percolate request:

multi percolate request를 사용하면:

MultiPercolateRequest request = new MultiPercolateRequest();
// set stuff and then execute:
MultiPercolateResponse response = transportClient.execute(MultiPercolateAction.INSTANCE, request).get();

Using multi percolate request builder:

multi percolate request builder를 사용하면:

MultiPercolateRequestBuilder builder = new MultiPercolateRequestBuilder(transportClient, MultiPercolateAction.INSTANCE);
// set stuff and then execute:
MultiPercolateResponse response = builder.get();


'5.X > 8. Breaking Changes' 카테고리의 다른 글

v5.0-01. Search and Query DSL changes  (0) 2017.10.23
v5.0-02. Mapping changes  (0) 2017.10.23
v5.0-04. Suggester changes  (0) 2017.10.23
v5.0-05. Index APIs changes  (0) 2017.10.23
v5.0-06. Document API changes  (0) 2017.10.23