All Downloads are FREE. Search and download functionalities are using the official Maven repository.

search.DocSearcher Maven / Gradle / Ivy

The newest version!
package search;

import client.ClientFactory;
import model.Doc;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.sort.SortOrder;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

public class DocSearcher {


    /**
     * 根据docId返回文档信息
     */
    public static Doc search(String index, String type, String docId) {
        GetResponse response = ClientFactory.get().prepareGet(index, type, docId)
                .setFetchSource(new String[]{"year", "fos", "venue"}, null)
                .get();
        Map source = response.getSourceAsMap();
        return doc(docId, source);
    }

    /**
     * 查询文章的引文
     *
     */
    public static List searchCitation(String index, String type, String docId) {
        long start = System.currentTimeMillis();
        SearchResponse response = ClientFactory.get().prepareSearch(index)
                .setTypes(type)
                .setQuery(QueryBuilders.termQuery("references", docId))
                .setFetchSource(new String[]{"year", "fos", "venue"}, null)
                .addSort("year", SortOrder.ASC)
                .setScroll(new TimeValue(5, TimeUnit.MINUTES))
                .setSize(3000)
                .get();
        String scrollId = response.getScrollId();
        SearchHit[] searchHits = response.getHits().getHits();
        List citations = new ArrayList<>();
        Map source;
        for (SearchHit hit : searchHits) {
            source = hit.getSourceAsMap();
            citations.add(doc(hit.getId(), source));
        }
        for (SearchHit hit : ScrollSearch.searchByScrollId(scrollId)) {
            source = hit.getSourceAsMap();
            citations.add(doc(hit.getId(), source));
        }
        return citations;
    }

    private static Doc doc(String docId, Map source) {
        int year = source.containsKey("year") ? (Integer) source.get("year") : 0;
        List foses = source.containsKey("fos") ? (List) source.get("fos") : null;
        String issn = source.containsKey("venue") ? (String) source.get("venue") : null;
        return new Doc(docId, year, foses, issn);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy