/* * Hibernate Search, full-text search for your domain model * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.search.elasticsearch.test; import java.io.Serializable; import java.util.List; import org.apache.lucene.search.Query; import org.hibernate.search.annotations.DocumentId; import org.hibernate.search.annotations.Field; import org.hibernate.search.annotations.Indexed; import org.hibernate.search.annotations.Store; import org.hibernate.search.backend.spi.Work; import org.hibernate.search.backend.spi.WorkType; import org.hibernate.search.engine.integration.impl.ExtendedSearchIntegrator; import org.hibernate.search.query.dsl.QueryBuilder; import org.hibernate.search.query.engine.spi.EntityInfo; import org.hibernate.search.spi.SearchIntegrator; import org.hibernate.search.testsupport.TestForIssue; import org.hibernate.search.testsupport.junit.SearchFactoryHolder; import org.hibernate.search.testsupport.setup.TransactionContextForTest; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; public class ElasticsearchMultitenancyIT { @Rule public SearchFactoryHolder sfHolder = new SearchFactoryHolder( User.class ) .withMultitenancyEnabled( true ); @Test @TestForIssue(jiraKey = "HSEARCH-2420") public void testWithCustomId() throws Exception { String customId = "S:custom_id_325"; ExtendedSearchIntegrator searchIntegrator = sfHolder.getSearchFactory(); User user = new User(); user.setId( customId ); user.setSurname( "Lee" ); indexUser( "tenant_id_with_underscores", user, customId, searchIntegrator ); QueryBuilder queryBuilder = searchIntegrator.buildQueryBuilder().forEntity( User.class ).get(); Query query = queryBuilder.keyword().onField( "surname" ).matching( "Lee" ).createQuery(); List<EntityInfo> entityInfoList = searchIntegrator.createHSQuery( query, User.class ).queryEntityInfos(); Assert.assertEquals( 1, entityInfoList.size() ); Assert.assertEquals( customId, entityInfoList.iterator().next().getId() ); } private void indexUser(String tenantId, User user, Serializable id, SearchIntegrator searchIntegrator) { Work work = new Work( tenantId, user, id, WorkType.ADD, false ); TransactionContextForTest tc = new TransactionContextForTest(); searchIntegrator.getWorker().performWork( work, tc ); tc.end(); } @Indexed private static class User { @DocumentId private String id; @Field(store = Store.YES) private String surname; public void setId(String id) { this.id = id; } public void setSurname(String surname) { this.surname = surname; } } }