Example usage for org.apache.solr.common.params MoreLikeThisParams MLT

List of usage examples for org.apache.solr.common.params MoreLikeThisParams MLT

Introduction

In this page you can find the example usage for org.apache.solr.common.params MoreLikeThisParams MLT.

Prototype

String MLT

To view the source code for org.apache.solr.common.params MoreLikeThisParams MLT.

Click Source Link

Usage

From source file:org.dspace.discovery.SolrServiceImpl.java

License:BSD License

@Override
public List<Item> getRelatedItems(Context context, Item item, DiscoveryMoreLikeThisConfiguration mltConfig) {
    List<Item> results = new ArrayList<Item>();
    try {/*  w ww .  j  av a2 s .  c o m*/
        SolrQuery solrQuery = new SolrQuery();
        //Set the query to handle since this is unique
        solrQuery.setQuery("handle: " + item.getHandle());
        //Add the more like this parameters !
        solrQuery.setParam(MoreLikeThisParams.MLT, true);
        //Add a comma separated list of the similar fields
        @SuppressWarnings("unchecked")
        java.util.Collection<String> similarityMetadataFields = CollectionUtils
                .collect(mltConfig.getSimilarityMetadataFields(), new Transformer() {
                    @Override
                    public Object transform(Object input) {
                        //Add the mlt appendix !
                        return input + "_mlt";
                    }
                });

        solrQuery.setParam(MoreLikeThisParams.SIMILARITY_FIELDS,
                StringUtils.join(similarityMetadataFields, ','));
        solrQuery.setParam(MoreLikeThisParams.MIN_TERM_FREQ, String.valueOf(mltConfig.getMinTermFrequency()));
        solrQuery.setParam(MoreLikeThisParams.DOC_COUNT, String.valueOf(mltConfig.getMax()));
        solrQuery.setParam(MoreLikeThisParams.MIN_WORD_LEN, String.valueOf(mltConfig.getMinWordLength()));

        if (getSolr() == null) {
            return Collections.emptyList();
        }
        QueryResponse rsp = getSolr().query(solrQuery);
        NamedList mltResults = (NamedList) rsp.getResponse().get("moreLikeThis");
        if (mltResults != null && mltResults.get(item.getType() + "-" + item.getID()) != null) {
            SolrDocumentList relatedDocs = (SolrDocumentList) mltResults
                    .get(item.getType() + "-" + item.getID());
            for (Object relatedDoc : relatedDocs) {
                SolrDocument relatedDocument = (SolrDocument) relatedDoc;
                DSpaceObject relatedItem = findDSpaceObject(context, relatedDocument);
                if (relatedItem.getType() == Constants.ITEM) {
                    results.add((Item) relatedItem);
                }
            }
        }

    } catch (Exception e) {
        log.error(LogManager.getHeader(context, "Error while retrieving related items",
                "Handle: " + item.getHandle()), e);
    }
    return results;
}

From source file:uk.ac.edukapp.repository.SolrConnector.java

License:Apache License

/**
 * Execute a MoreLikeThis query on the Solr server
 * /*from w w  w  .  j  ava2s  . co  m*/
 * @param term
 *            the match term, typically a uri: match
 * @param lang
 *            the language core to search
 * @return more widgets like the one identified by term
 */
public List<Widget> moreLikeThis(String term, String lang) {
    try {
        SolrServer server = getLocalizedSolrServer(lang);
        SolrQuery query = new SolrQuery();

        query.setQueryType("/" + MoreLikeThisParams.MLT);
        query.set(MoreLikeThisParams.MATCH_INCLUDE, false);
        query.set(MoreLikeThisParams.MIN_DOC_FREQ, 1);
        query.set(MoreLikeThisParams.MIN_TERM_FREQ, 1);
        query.set(MoreLikeThisParams.SIMILARITY_FIELDS, "title,description");
        query.setQuery(term);
        QueryResponse rsp = server.query(query);

        List<Widget> widgets = rsp.getBeans(Widget.class);
        return widgets;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return new ArrayList<Widget>();
}