package org.xbib.elasticsearch.index.mapper.reference.simple; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.support.WriteRequest; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.search.SearchHit; import org.junit.Test; import org.xbib.elasticsearch.NodeTestUtils; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import static org.elasticsearch.common.io.Streams.copyToString; import static org.elasticsearch.index.query.QueryBuilders.matchQuery; import static org.junit.Assert.assertEquals; /** * */ public class SimpleReferenceMappingTests extends NodeTestUtils { private static final Logger logger = LogManager.getLogger(SimpleReferenceMappingTests.class.getName()); @Test public void testSimpleRef() throws IOException { startCluster(); try { try { client().admin().indices().prepareDelete("ref").execute().actionGet(); } catch (Exception e) { logger.warn("can not delete index ref"); } client().admin().indices().prepareCreate("ref") .setSettings(copyToStringFromClasspath("ref-simple-settings.json"), XContentType.JSON) .addMapping("ref", copyToStringFromClasspath("ref-simple-mapping.json"), XContentType.JSON) .execute().actionGet(); client().prepareIndex("ref", "ref", "1") .setSource(copyToStringFromClasspath("ref-simple-document.json"), XContentType.JSON) .setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).execute().actionGet(); try { client().admin().indices().prepareDelete("doc").execute().actionGet(); } catch (Exception e) { logger.warn("can not delete index doc"); } client().admin().indices().prepareCreate("doc") .setSettings(copyToStringFromClasspath("doc-simple-settings.json"), XContentType.JSON) .addMapping("doc", copyToStringFromClasspath("doc-simple-mapping.json"), XContentType.JSON) .execute().actionGet(); client().prepareIndex("doc", "doc", "1") .setSource(copyToStringFromClasspath("doc-simple-document.json"), XContentType.JSON) .setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).execute().actionGet(); // search for "first" QueryBuilder queryBuilder = matchQuery("dc.creator", "first"); SearchResponse searchResponse = client().prepareSearch("doc") .setQuery(queryBuilder) .execute().actionGet(); logger.info("first query, hits = {}", searchResponse.getHits().getTotalHits()); for (SearchHit hit : searchResponse.getHits().getHits()) { logger.info("{}", hit.getSource()); } assertEquals(1, searchResponse.getHits().getTotalHits()); // search for "second" which comes from ref queryBuilder = matchQuery("dc.creator", "second"); searchResponse = client().prepareSearch("doc") .setQuery(queryBuilder) .execute().actionGet(); logger.info("second query, hits = {}", searchResponse.getHits().getTotalHits()); for (SearchHit hit : searchResponse.getHits().getHits()) { logger.info("{}", hit.getSource()); } assertEquals(1, searchResponse.getHits().getTotalHits()); } finally { stopCluster(); } } private String copyToStringFromClasspath(String path) throws IOException { return copyToString(new InputStreamReader(getClass().getResource(path).openStream(), StandardCharsets.UTF_8)); } }