lucene几种Query对象示例

package player.kent.chen.temp.lucene.miscquery;

import java.io.IOException;

public class MyLuceneMiscQueryDemo {

    public static void main(String[] args) throws Exception {

        //创建index writer对象
        Directory indexDir = new RAMDirectory();
        IndexWriter indexWriter = new IndexWriter(indexDir,
                new StandardAnalyzer(Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);

        String text1 = "adam";
        Document doc1 = new Document();
        doc1.add(new Field("content", text1, Field.Store.YES, Field.Index.ANALYZED));
        indexWriter.addDocument(doc1);

        String text2 = "brings";
        Document doc2 = new Document();
        doc2.add(new Field("content", text2, Field.Store.YES, Field.Index.ANALYZED));
        indexWriter.addDocument(doc2);

        String text3 = "cups";
        Document doc3 = new Document();
        doc3.add(new Field("content", text3, Field.Store.YES, Field.Index.ANALYZED));
        indexWriter.addDocument(doc3);

        IndexSearcher indexSearcher = new IndexSearcher(indexWriter.getReader());

        //term query
        doSearch(indexSearcher, new TermQuery(new Term("content", "adam"))); //命中admin
        //term range query
        doSearch(indexSearcher, new TermRangeQuery("content", "b", "c", true, true)); //命中adam, brings; 按字典序cups > c, 所以cups不会被命中
        //prefix query
        doSearch(indexSearcher, new PrefixQuery(new Term("content", "b"))); //命中brings
        //wildcard query
        doSearch(indexSearcher, new WildcardQuery(new Term("content", "c*s"))); //命中cups
        //fuzzy query
        doSearch(indexSearcher, new FuzzyQuery(new Term("content", "caps"))); //命中cups
        doSearch(indexSearcher, new FuzzyQuery(new Term("content", "csp"))); //无命中

        indexSearcher.close();
        indexWriter.close();
    }

    private static void doSearch(IndexSearcher indexSearcher, Query query) throws IOException {
        System.out.println("========================================");
        System.out.println("The query is : " + query);
        TopDocs searchResult = indexSearcher.search(query, 10);
        System.out.println(MessageFormat.format("Found {0} matches", searchResult.totalHits));
        System.out.println("They are:");
        printResult(indexSearcher, searchResult);

    }

    private static void printResult(IndexSearcher indexSearcher, TopDocs result)
            throws CorruptIndexException, IOException {
        for (ScoreDoc scoreDoc : result.scoreDocs) {
            Document doc = indexSearcher.doc(scoreDoc.doc);
            System.out.println(doc.get("content"));
        }
    }
}


Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.