org.unlaxer.jaddress.parser.SearchEngineDataAccessContextImpl Maven / Gradle / Ivy
package org.unlaxer.jaddress.parser;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;
import org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection;
import org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.elasticsearch.action.bulk.BulkProcessor;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.unlaxer.jaddress.ElaticeSearchAccessor;
import org.unlaxer.jaddress.Indexes;
import org.unlaxer.jaddress.gremlin.GremlinUtil;
import org.unlaxer.util.Either;
import org.unlaxer.util.collection.ID;
public class SearchEngineDataAccessContextImpl implements SearchEngineDataAccessContext{
ElaticeSearchAccessor elaticeSearchAccessor;
AddressParser addressParser;
JyuusyoJPDataAccessContext jyuusyoJPDataAccessContext;
public SearchEngineDataAccessContextImpl(
ElaticeSearchAccessor elaticeSearchAccessor,
JyuusyoJPDataAccessContext jyuusyoJPDataAccessContext,
AddressParser addressParser) {
super();
this.elaticeSearchAccessor = elaticeSearchAccessor;
this.jyuusyoJPDataAccessContext = jyuusyoJPDataAccessContext;
this.addressParser = addressParser;
}
@Override
public CheckExistenceResponse search(CheckExistenceParameter parameter) {
// TODO Auto-generated method stub
return null;
}
@Override
public CheckExistenceResponse get(ID id) {
return null;
}
@Override
public UpdateResponse update(Stream extends AddressContext> addresses , DataAccessContext dataAccessContext) {
UpdateResponse updateResponse = new UpdateResponse();
RestHighLevelClient client = elaticeSearchAccessor.get();
CountableBulkProcessorListerner listener = new CountableBulkProcessorListerner();
try (BulkProcessor bulkProcessor = BulkProcessor
.builder((request, bulkListener) -> client.bulkAsync(request, RequestOptions.DEFAULT, bulkListener),
listener)
.build();
DriverRemoteConnection conn = DriverRemoteConnection.using("localhost", 8182, "g");
GraphTraversalSource g = AnonymousTraversalSource.traversal().withRemote(conn);) {
GremlinUtil gremlinUtil = new GremlinUtil(g);
addresses.forEach(addressContext->{
IndexRequest indexRequest = Indexes.ad_address.createIndexRequest();
indexRequest.id(addressContext.id.toString());
Map source = createSource(addressContext , dataAccessContext);
if(source.isEmpty()) {
updateResponse.addFailed(1);
updateResponse.addParseError(addressContext.id);
}else {
indexRequest.source(source);
bulkProcessor.add(indexRequest);
updateResponse.addSucceded(1);
}
gremlinUtil.create(addressContext);
});
boolean terminated = bulkProcessor.awaitClose(30L, TimeUnit.SECONDS);
DataAccessContextImpl.logger.info("terminated:" + terminated);
updateResponse.addFailed(listener.failed);
updateResponse.addIndexError(listener.errorsIds);
return updateResponse;
} catch (Exception e) {
DataAccessContextImpl.logger.error("error",e);
updateResponse.addFailed(1);
updateResponse.addErrorMessage(e.getMessage());
return updateResponse;
}
}
Map createSource(AddressContext addressContext , DataAccessContext dataAccessContext) {
ParsingContext parsingContext = new ParsingContext(
dataAccessContext,
addressContext
);
addressParser.parse(parsingContext);
AddressContext returning = parsingContext.addressContext;
// var id = returning.id.getName();
Map valueByKey = new TreeMap<>();
valueByKey.put("zip", returning.zip.hyphonated);
valueByKey.put("input", addressContext.addressString.joined());
Either results = parsingContext.addressContext.results();
results.right.ifPresent(result -> {
result.get().stream().forEach(as -> {
as.get().forEach(addressElement -> {
String value = addressElement.asString();
if (value != null && !value.isBlank()) {
valueByKey.put(String.valueOf(addressElement.階層要素().level), value);
}
});
});
});
return valueByKey;
}
} © 2015 - 2025 Weber Informatics LLC | Privacy Policy