List of usage examples for org.apache.lucene.queries.mlt MoreLikeThis retrieveInterestingTerms
public String[] retrieveInterestingTerms(int docNum) throws IOException
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); }