Package fr.inra.lipm.jezlucene.action

Source Code of fr.inra.lipm.jezlucene.action.Search

package fr.inra.lipm.jezlucene.action;

import java.io.IOException;
import java.util.List;

import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TopScoreDocCollector;
import org.apache.lucene.store.FSDirectory;
import org.kohsuke.args4j.Option;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.collect.Lists;

import fr.inra.lipm.jezlucene.Converter;
import fr.inra.lipm.jezlucene.cfg.Configuration;

/**
* @author llegrand
*/
public class Search extends Action {

    private static Logger logger = LoggerFactory.getLogger(Search.class);

    @Option(required = true, name = "-q", aliases = { "--query" }, usage = "query")
    private String query;

    public String search() throws IOException {
        final IndexReader indexReader = DirectoryReader.open(FSDirectory.open(this.store));
        final IndexSearcher indexSearcher = new IndexSearcher(indexReader);

        final QueryParser queryParser = new QueryParser(Configuration.VERSION, "", Configuration.ANALYZER);
        try {
            final Query validQuery = queryParser.parse(this.query);
            final TopScoreDocCollector hits = TopScoreDocCollector.create(10, true);
            indexSearcher.search(validQuery, hits);

            final List<Document> documents = Lists.newArrayList();
            for (int index = 0; index <= hits.getTotalHits(); index++) {
                documents.add(indexSearcher.doc(index));
            }
            return Converter.document2JSON(documents);
        }
        catch (final ParseException e) {
            logger.error("Malformed lucene query: {}", e.getMessage());
            logger.trace("Stacktrace", e.fillInStackTrace());
        }
        return null;
    }
}
TOP

Related Classes of fr.inra.lipm.jezlucene.action.Search

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.