in core/src/main/java/org/apache/sdap/mudrod/recommendation/process/FeatureBasedSimilarity.java [108:158]
private void featureSimilarity(ESDriver es) {
es.createBulkProcessor();
List<Map<String, Object>> metadatas = new ArrayList<>();
SearchResponse scrollResp = es.getClient().prepareSearch(indexName).setTypes(metadataType).setScroll(new TimeValue(60000)).setQuery(QueryBuilders.matchAllQuery()).setSize(100).execute()
.actionGet();
while (true) {
for (SearchHit hit : scrollResp.getHits().getHits()) {
Map<String, Object> metadataA = hit.getSource();
metadatas.add(metadataA);
}
scrollResp = es.getClient().prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(600000)).execute().actionGet();
if (scrollResp.getHits().getHits().length == 0) {
break;
}
}
int size = metadatas.size();
for (int i = 0; i < size; i++) {
Map<String, Object> metadataA = metadatas.get(i);
String shortNameA = (String) metadataA.get(props.getProperty(MudrodConstants.METADATA_ID));
for (int j = 0; j < size; j++) {
metadataA = metadatas.get(i);
Map<String, Object> metadataB = metadatas.get(j);
String shortNameB = (String) metadataB.get(props.getProperty(MudrodConstants.METADATA_ID));
try {
XContentBuilder contentBuilder = jsonBuilder().startObject();
contentBuilder.field("concept_A", shortNameA);
contentBuilder.field("concept_B", shortNameB);
// feature similarity
metadata.featureSimilarity(metadataA, metadataB, contentBuilder);
contentBuilder.endObject();
IndexRequest ir = new IndexRequest(indexName, variableSimType).source(contentBuilder);
es.getBulkProcessor().add(ir);
} catch (IOException e) {
LOG.error("Indexing feature similarity is failed!", e);
}
}
}
es.destroyBulkProcessor();
}