Example usage for org.apache.lucene.queries.mlt MoreLikeThis retrieveInterestingTerms

List of usage examples for org.apache.lucene.queries.mlt MoreLikeThis retrieveInterestingTerms

Introduction

In this page you can find the example usage for org.apache.lucene.queries.mlt MoreLikeThis retrieveInterestingTerms.

Prototype

public String[] retrieveInterestingTerms(int docNum) throws IOException 

Source Link

Usage

From source file:org.apache.solr.handler.RedbubbleMoreLikeThisHandler.java

License:Apache License

@Override
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
    SolrParams params = req.getParams();
    Integer originalDocId = params.getInt(DOC_ID_PARAM);
    String[] similarityFields = params.getParams(MoreLikeThisParams.SIMILARITY_FIELDS);

    if (similarityFields == null || similarityFields.length < 1) {
        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
                "MoreLikeThis requires at least one similarity field: " + MoreLikeThisParams.SIMILARITY_FIELDS);
    }/*from   ww  w. j a va 2 s. co  m*/

    if (originalDocId == null) {
        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "id parameter missing!");
    }

    SolrIndexSearcher searcher = req.getSearcher();
    MoreLikeThis mlt = new MoreLikeThis(searcher.getIndexReader());
    setMLTparams(params, similarityFields, mlt);

    Query originalDocQuery = createOriginalDocQuery(originalDocId, req);
    int matchLuceneDocId = getOriginalDocLuceneDocId(originalDocQuery, searcher);

    //TODO: cache interesting terms per doc?
    String[] interestingTerms = mlt.retrieveInterestingTerms(matchLuceneDocId);

    Query edismaxQuery = createEdismaxQuery(interestingTerms, params, req);

    DocList results = executeEdismaxQuery(edismaxQuery, params, searcher);

    boolean returnInterestingTerms = params.getBool(INTERESTING_TERMS_PARAM, false);

    if (returnInterestingTerms) {
        rsp.add("interestingTerms", interestingTerms);
    }

    rsp.add("response", results);
}