private void featureSimilarity()

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();
  }