Skip to content

Commit

Permalink
Upgrade to Hibernate Search 6.0.0.Beta5
Browse files Browse the repository at this point in the history
  • Loading branch information
yrodiere committed Feb 24, 2020
1 parent 3c7783c commit 075f267
Show file tree
Hide file tree
Showing 9 changed files with 205 additions and 53 deletions.
4 changes: 2 additions & 2 deletions bom/runtime/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,12 @@
<classmate.version>1.3.4</classmate.version>
<hibernate-orm.version>5.4.12.Final</hibernate-orm.version>
<hibernate-validator.version>6.1.2.Final</hibernate-validator.version>
<hibernate-search.version>6.0.0.Beta4</hibernate-search.version>
<hibernate-search.version>6.0.0.Beta5</hibernate-search.version>
<narayana.version>5.10.0.Final</narayana.version>
<jboss-transaction-api_1.2_spec.version>1.1.1.Final</jboss-transaction-api_1.2_spec.version>
<agroal.version>1.7</agroal.version>
<jboss-transaction-spi.version>7.6.0.Final</jboss-transaction-spi.version>
<elasticsearch-rest-client.version>7.5.0</elasticsearch-rest-client.version>
<elasticsearch-rest-client.version>7.6.0</elasticsearch-rest-client.version>
<rxjava1.version>1.3.8</rxjava1.version>
<rxjava.version>2.2.18</rxjava.version>
<wildfly.openssl.version>1.0.6.Final</wildfly.openssl.version>
Expand Down
2 changes: 1 addition & 1 deletion build-parent/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<properties>
<!-- Maven plugin versions -->
<elasticsearch-maven-plugin.version>6.15</elasticsearch-maven-plugin.version>
<elasticsearch-server.version>7.5.0</elasticsearch-server.version>
<elasticsearch-server.version>7.6.0</elasticsearch-server.version>
<scala-maven-plugin.version>4.1.1</scala-maven-plugin.version>

<!-- These properties are needed in order for them to be resolvable by the generated projects -->
Expand Down
7 changes: 4 additions & 3 deletions docs/src/main/asciidoc/hibernate-search-elasticsearch.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -483,7 +483,7 @@ In our existing `LibraryResource`, we just need to inject the following methods
@QueryParam Optional<Integer> size) {
return Search.session(em) // <5>
.search(Author.class) // <6>
.predicate(f ->
.where(f ->
pattern == null || pattern.trim().isEmpty() ?
f.matchAll() : // <7>
f.simpleQueryString()
Expand Down Expand Up @@ -536,7 +536,7 @@ quarkus.hibernate-search.elasticsearch.version=7 <5>
quarkus.hibernate-search.elasticsearch.analysis.configurer=org.acme.hibernate.search.elasticsearch.config.AnalysisConfigurer <6>
quarkus.hibernate-search.elasticsearch.index-defaults.lifecycle.strategy=drop-and-create <7>
quarkus.hibernate-search.elasticsearch.index-defaults.lifecycle.required-status=yellow <8>
quarkus.hibernate-search.automatic-indexing.synchronization.strategy=searchable <9>
quarkus.hibernate-search.automatic-indexing.synchronization.strategy=sync <9>
----
<1> We won't use SSL so we disable it to have a more compact native executable.
<2> Let's create a PostgreSQL datasource.
Expand All @@ -551,7 +551,8 @@ Since the mapping is created at build time to reduce startup time, Hibernate Sea
This is for testing purposes with the Elasticsearch Docker container.
It should not be used in production.
<9> This means that we wait for the entities to be searchable before considering a write complete.
While, on a production setup, the `committed` default might be a suitable value, using `searchable` is especially important when testing as you need the entities to be searchable immediately.
While on a production setup, the `write-sync` default might be a suitable value.
Using `sync` is especially important when testing as you need the entities to be searchable immediately.

[TIP]
For more information about the Hibernate Search extension configuration please refer to the <<configuration-reference, Configuration Reference>>.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,26 @@
import java.util.Arrays;
import java.util.List;

import org.hibernate.search.backend.elasticsearch.analysis.model.esnative.impl.AbstractCompositeAnalysisDefinition;
import org.hibernate.search.backend.elasticsearch.analysis.model.esnative.impl.AnalysisDefinition;
import org.hibernate.search.backend.elasticsearch.analysis.model.esnative.impl.AnalysisDefinitionJsonAdapterFactory;
import org.hibernate.search.backend.elasticsearch.analysis.model.esnative.impl.AnalyzerDefinition;
import org.hibernate.search.backend.elasticsearch.analysis.model.esnative.impl.AnalyzerDefinitionJsonAdapterFactory;
import org.hibernate.search.backend.elasticsearch.analysis.model.esnative.impl.CharFilterDefinition;
import org.hibernate.search.backend.elasticsearch.analysis.model.esnative.impl.NormalizerDefinition;
import org.hibernate.search.backend.elasticsearch.analysis.model.esnative.impl.NormalizerDefinitionJsonAdapterFactory;
import org.hibernate.search.backend.elasticsearch.analysis.model.esnative.impl.TokenFilterDefinition;
import org.hibernate.search.backend.elasticsearch.analysis.model.esnative.impl.TokenizerDefinition;
import org.hibernate.search.backend.elasticsearch.document.model.esnative.impl.AbstractTypeMapping;
import org.hibernate.search.backend.elasticsearch.document.model.esnative.impl.AbstractTypeMappingJsonAdapterFactory;
import org.hibernate.search.backend.elasticsearch.document.model.esnative.impl.DynamicType;
import org.hibernate.search.backend.elasticsearch.document.model.esnative.impl.ElasticsearchFormatJsonAdapter;
import org.hibernate.search.backend.elasticsearch.document.model.esnative.impl.ElasticsearchRoutingTypeJsonAdapter;
import org.hibernate.search.backend.elasticsearch.document.model.esnative.impl.PropertyMapping;
import org.hibernate.search.backend.elasticsearch.document.model.esnative.impl.PropertyMappingJsonAdapterFactory;
import org.hibernate.search.backend.elasticsearch.document.model.esnative.impl.RootTypeMapping;
import org.hibernate.search.backend.elasticsearch.document.model.esnative.impl.RootTypeMappingJsonAdapterFactory;
import org.hibernate.search.backend.elasticsearch.document.model.esnative.impl.RoutingType;
import org.hibernate.search.backend.elasticsearch.index.settings.esnative.impl.Analysis;
import org.hibernate.search.backend.elasticsearch.index.settings.esnative.impl.IndexSettings;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.analysis.impl.AnalysisDefinition;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.analysis.impl.AnalysisDefinitionJsonAdapterFactory;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.analysis.impl.AnalyzerDefinition;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.analysis.impl.AnalyzerDefinitionJsonAdapterFactory;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.analysis.impl.CharFilterDefinition;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.analysis.impl.NormalizerDefinition;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.analysis.impl.NormalizerDefinitionJsonAdapterFactory;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.analysis.impl.TokenFilterDefinition;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.analysis.impl.TokenizerDefinition;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.mapping.impl.AbstractTypeMapping;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.mapping.impl.DynamicType;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.mapping.impl.FormatJsonAdapter;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.mapping.impl.PropertyMapping;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.mapping.impl.PropertyMappingJsonAdapterFactory;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.mapping.impl.RootTypeMapping;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.mapping.impl.RootTypeMappingJsonAdapterFactory;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.mapping.impl.RoutingType;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.mapping.impl.RoutingTypeJsonAdapter;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.settings.impl.Analysis;
import org.hibernate.search.backend.elasticsearch.lowlevel.index.settings.impl.IndexSettings;
import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed;
import org.hibernate.search.mapper.pojo.mapping.definition.annotation.processing.TypeMapping;
import org.jboss.jandex.DotName;
Expand All @@ -37,12 +35,11 @@ class HibernateSearchClasses {
org.hibernate.search.mapper.pojo.mapping.definition.annotation.processing.PropertyMapping.class.getName());
static final DotName TYPE_MAPPING_META_ANNOTATION = DotName.createSimple(TypeMapping.class.getName());

static final List<DotName> SCHEMA_MAPPING_CLASSES = Arrays.asList(
static final List<DotName> GSON_CLASSES = Arrays.asList(
DotName.createSimple(AbstractTypeMapping.class.getName()),
DotName.createSimple(AbstractTypeMappingJsonAdapterFactory.class.getName()),
DotName.createSimple(DynamicType.class.getName()),
DotName.createSimple(ElasticsearchFormatJsonAdapter.class.getName()),
DotName.createSimple(ElasticsearchRoutingTypeJsonAdapter.class.getName()),
DotName.createSimple(FormatJsonAdapter.class.getName()),
DotName.createSimple(RoutingTypeJsonAdapter.class.getName()),
DotName.createSimple(PropertyMapping.class.getName()),
DotName.createSimple(PropertyMappingJsonAdapterFactory.class.getName()),
DotName.createSimple(RootTypeMapping.class.getName()),
Expand All @@ -51,7 +48,6 @@ class HibernateSearchClasses {
DotName.createSimple(IndexSettings.class.getName()),
DotName.createSimple(Analysis.class.getName()),
DotName.createSimple(AnalysisDefinition.class.getName()),
DotName.createSimple(AbstractCompositeAnalysisDefinition.class.getName()),
DotName.createSimple(AnalyzerDefinition.class.getName()),
DotName.createSimple(AnalyzerDefinitionJsonAdapterFactory.class.getName()),
DotName.createSimple(NormalizerDefinition.class.getName()),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
package io.quarkus.hibernate.search.elasticsearch;

import static io.quarkus.hibernate.search.elasticsearch.HibernateSearchClasses.GSON_CLASSES;
import static io.quarkus.hibernate.search.elasticsearch.HibernateSearchClasses.INDEXED;
import static io.quarkus.hibernate.search.elasticsearch.HibernateSearchClasses.PROPERTY_MAPPING_META_ANNOTATION;
import static io.quarkus.hibernate.search.elasticsearch.HibernateSearchClasses.SCHEMA_MAPPING_CLASSES;
import static io.quarkus.hibernate.search.elasticsearch.HibernateSearchClasses.TYPE_MAPPING_META_ANNOTATION;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Stream;

import org.jboss.jandex.AnnotationInstance;
import org.jboss.jandex.AnnotationTarget;
Expand Down Expand Up @@ -177,9 +175,12 @@ private void registerReflection(IndexView index, BuildProducer<ReflectiveClassBu
}
}

String[] reflectiveClasses = Stream
.of(reflectiveClassCollector.stream(), SCHEMA_MAPPING_CLASSES.stream())
.flatMap(Function.identity()).map(c -> c.toString()).toArray(String[]::new);
for (DotName gsonClass : GSON_CLASSES) {
addReflectiveClass(index, reflectiveClassCollector, reflectiveHierarchyCollector,
index.getClassByName(gsonClass));
}

String[] reflectiveClasses = reflectiveClassCollector.stream().map(DotName::toString).toArray(String[]::new);
reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, reflectiveClasses));

for (Type reflectiveHierarchyType : reflectiveHierarchyCollector) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

import org.hibernate.search.backend.elasticsearch.index.IndexLifecycleStrategyName;
import org.hibernate.search.backend.elasticsearch.index.IndexStatus;
import org.hibernate.search.mapper.orm.automaticindexing.AutomaticIndexingSynchronizationStrategyName;
import org.hibernate.search.mapper.orm.automaticindexing.session.AutomaticIndexingSynchronizationStrategyNames;
import org.hibernate.search.mapper.orm.search.loading.EntityLoadingCacheLookupStrategy;
import org.hibernate.search.util.common.SearchException;
import org.hibernate.search.util.common.impl.StringHelper;
Expand Down Expand Up @@ -210,13 +210,167 @@ public static class AutomaticIndexingSynchronizationConfig {
/**
* The synchronization strategy to use when indexing automatically.
* <p>
* Defines the status for which you wait before considering the operation completed by Hibernate Search.
* Defines how complete indexing should be before resuming the application thread
* after a database transaction is committed.
* <p>
* Use {@code queued} or {@code committed} in production environments.
* {@code searchable} is useful in integration tests.
* Available values:
* <table>
* <thead>
* <tr>
* <th rowspan="2">
* <p>
* Strategy
* </p>
* </th>
* <th colspan="3">
* <p>
* Guarantees when the application thread resumes
* </p>
* </th>
* <th rowspan="2">
* <p>
* Throughput
* </p>
* </th>
* </tr>
* <tr>
* <th>
* <p>
* Changes applied
* </p>
* </th>
* <th>
* <p>
* Changes safe from crash/power loss
* </p>
* </th>
* <th>
* <p>
* Changes visible on search
* </p>
* </th>
* </tr>
* </thead>
* <tbody>
* <tr>
* <td>
* <p>
* <code>{@value AutomaticIndexingSynchronizationStrategyNames#ASYNC}</code>
* </p>
* </td>
* <td>
* <p>
* No guarantee
* </p>
* </td>
* <td>
* <p>
* No guarantee
* </p>
* </td>
* <td>
* <p>
* No guarantee
* </p>
* </td>
* <td>
* <p>
* Best
* </p>
* </td>
* </tr>
* <tr>
* <td>
* <p>
* <code>{@value AutomaticIndexingSynchronizationStrategyNames#WRITE_SYNC}</code> (<strong>default</strong>)
* </p>
* </td>
* <td>
* <p>
* Guaranteed
* </p>
* </td>
* <td>
* <p>
* Guaranteed
* </p>
* </td>
* <td>
* <p>
* No guarantee
* </p>
* </td>
* <td>
* <p>
* Medium
* </p>
* </td>
* </tr>
* <tr>
* <td>
* <p>
* <code>{@value AutomaticIndexingSynchronizationStrategyNames#READ_SYNC}</code>
* </p>
* </td>
* <td>
* <p>
* Guaranteed
* </p>
* </td>
* <td>
* <p>
* No guarantee
* </p>
* </td>
* <td>
* <p>
* Guaranteed
* </p>
* </td>
* <td>
* <p>
* Medium to worst
* </p>
* </td>
* </tr>
* <tr>
* <td>
* <p>
* <code>{@value AutomaticIndexingSynchronizationStrategyNames#SYNC}</code>
* </p>
* </td>
* <td>
* <p>
* Guaranteed
* </p>
* </td>
* <td>
* <p>
* Guaranteed
* </p>
* </td>
* <td>
* <p>
* Guaranteed
* </p>
* </td>
* <td>
* <p>
* Worst
* </p>
* </td>
* </tr>
* </tbody>
* </table>
* <p>
* See
* <a href=
* "https://docs.jboss.org/hibernate/search/6.0/reference/en-US/html_single/#mapper-orm-indexing-automatic-synchronization">this
* section of the reference documentation</a>
* for more information.
*/
@ConfigItem(defaultValue = "committed")
AutomaticIndexingSynchronizationStrategyName strategy;
@ConfigItem(defaultValue = AutomaticIndexingSynchronizationStrategyNames.WRITE_SYNC)
String strategy;
}

@ConfigGroup
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public String testSearch() {
SearchSession searchSession = Search.session(entityManager);

List<Person> person = searchSession.search(Person.class)
.predicate(f -> f.match().field("name").matching("john"))
.where(f -> f.match().field("name").matching("john"))
.sort(f -> f.field("name_sort"))
.fetchHits(20);

Expand All @@ -48,7 +48,7 @@ public String testSearch() {
assertEquals("John Irving", person.get(1).getName());

person = searchSession.search(Person.class)
.predicate(f -> f.nested().objectField("address").nest(
.where(f -> f.nested().objectField("address").nest(
f.match().field("address.city").matching("london")))
.sort(f -> f.field("name_sort"))
.fetchHits(20);
Expand All @@ -71,12 +71,12 @@ public String testPurge() {
}

@PUT
@Path("/flush")
@Path("/refresh")
@Produces(MediaType.TEXT_PLAIN)
public String testFlush() {
public String testRefresh() {
SearchSession searchSession = Search.session(entityManager);

searchSession.workspace().flush();
searchSession.workspace().refresh();

return "OK";
}
Expand All @@ -88,7 +88,7 @@ public String testSearchEmpty() {
SearchSession searchSession = Search.session(entityManager);

List<Person> person = searchSession.search(Person.class)
.predicate(f -> f.matchAll())
.where(f -> f.matchAll())
.fetchHits(20);

assertEquals(0, person.size());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ quarkus.hibernate-orm.database.generation=drop-and-create
quarkus.hibernate-search.elasticsearch.version=7
quarkus.hibernate-search.elasticsearch.analysis.configurer=io.quarkus.it.hibernate.search.elasticsearch.search.DefaultITAnalysisConfigurer
quarkus.hibernate-search.elasticsearch.index-defaults.lifecycle.strategy=drop-and-create-and-drop
quarkus.hibernate-search.automatic-indexing.synchronization.strategy=searchable
quarkus.hibernate-search.automatic-indexing.synchronization.strategy=sync
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public void testSearch() throws Exception {
.statusCode(200)
.body(is("OK"));

RestAssured.when().put("/test/hibernate-search/flush").then()
RestAssured.when().put("/test/hibernate-search/refresh").then()
.statusCode(200)
.body(is("OK"));

Expand Down

0 comments on commit 075f267

Please sign in to comment.