package org.xbib.elasticsearch.index.mapper.reference.zipcodegeo;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.lucene.index.IndexableField;
import org.elasticsearch.action.support.WriteRequest;
import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.common.compress.CompressedXContent;
import org.elasticsearch.index.mapper.DocumentMapper;
import org.elasticsearch.index.mapper.DocumentMapperParser;
import org.elasticsearch.index.mapper.ParseContext;
import org.junit.After;
import org.junit.Before;
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.common.xcontent.XContentFactory.jsonBuilder;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.xbib.elasticsearch.MapperTestUtils.newDocumentMapperParser;
/**
*
*/
public class GeoReferenceMappingTests extends NodeTestUtils {
private static final Logger logger = LogManager.getLogger(GeoReferenceMappingTests.class.getName());
@Before
public void setupReferences() throws IOException {
startCluster();
try {
client().admin().indices().prepareDelete("ref").execute().actionGet();
} catch (Exception e) {
logger.warn("unable to delete 'ref' index");
}
client().prepareIndex("ref", "ref", "11229")
.setSource(jsonBuilder().startObject()
.startObject("point")
.field("lat", 40.6011)
.field("lon", -73.9475)
.endObject()
.endObject())
.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
.execute().actionGet();
}
@After
public void cleanup() throws IOException {
stopCluster();
}
@Test
public void testGeoRef() throws IOException {
String mapping = copyToStringFromClasspath("geo-mapping.json");
DocumentMapperParser mapperParser = newDocumentMapperParser("doc");
DocumentMapper docMapper = mapperParser.parse("doc", new CompressedXContent(mapping));
BytesReference json = jsonBuilder().startObject()
.field("zipcode", "11229")
.endObject().bytes();
ParseContext.Document doc = docMapper.parse("doc", "doc", "1", json).rootDoc();
assertNotNull(doc);
for (IndexableField field : doc.getFields()) {
logger.info("testGeoRefMappings {} = {}", field.name(), field.stringValue());
}
assertNotNull(docMapper.mappers().smartNameFieldMapper("point"));
// strange format, but we don't care. Needs adaption.
assertNull(doc.getFields("point")[0].stringValue());
assertEquals("4160878338827240632", doc.getFields("point")[1].stringValue());
}
private String copyToStringFromClasspath(String path) throws IOException {
return copyToString(new InputStreamReader(getClass().getResource(path).openStream(), StandardCharsets.UTF_8));
}
}