com.it.lucene.test.IndexSearch.java Source code

Java tutorial

Introduction

Here is the source code for com.it.lucene.test.IndexSearch.java

Source

package com.it.lucene.test;

import java.io.File;
import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.FuzzyQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.NumericRangeQuery;
import org.apache.lucene.search.PhraseQuery;
import org.apache.lucene.search.PrefixQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.WildcardQuery;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;
import org.wltea.analyzer.lucene.IKAnalyzer;

public class IndexSearch {

    private void doSearch(Query query) {
        try {
            // 2?IndexSearcher
            // 2.1 IndexReader
            // 2.1Directory
            Directory directory = FSDirectory.open(new File("F:\\Lucene Index"));
            IndexReader reader = DirectoryReader.open(directory);
            IndexSearcher searcher = new IndexSearcher(reader);
            // 3?indexSearcher?
            // ?
            TopDocs topDocs = searcher.search(query, 10);

            // 4??
            // ???
            long count = topDocs.totalHits;

            System.out.println("???:" + count);

            ScoreDoc[] scoreDocs = topDocs.scoreDocs;

            for (ScoreDoc scoreDoc : scoreDocs) {
                int docId = scoreDoc.doc;
                Document doc = searcher.doc(docId);
                System.out.println("?ID" + doc.get("id"));
                System.out.println("???" + doc.get("name"));
                System.out.println("?" + doc.get("price"));
                System.out.println("?pic" + doc.get("pic"));
            }
            // 5?IndexReader
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void termQuery() {
        // TermQuery

        TermQuery query = new TermQuery(new Term("description", "java"));
        doSearch(query);
    }

    @Test
    public void numericRangeQuery() {
        // TermQuery
        // ?????????????
        Query query = NumericRangeQuery.newFloatRange("price", 50f, 56f, false, true);
        doSearch(query);
    }

    @Test
    public void booleanQuery() {
        BooleanQuery query = new BooleanQuery();
        // TermQuery
        Query q1 = new TermQuery(new Term("description", "java"));
        Query q2 = NumericRangeQuery.newFloatRange("price", 50f, 56f, false, true);
        // 1?MUSTMUST???
        // 2?MUSTMUST_NOT?????
        // 3?MUST_NOTMUST_NOT?
        // 4?SHOULDMUSTMUSTSHOULD?
        // 5?SHOUlDMUST_NOTMUSTMUST_NOT
        // 6?SHOULDSHOULD?

        query.add(q1, Occur.MUST);
        query.add(q2, Occur.MUST);

        System.out.println(query);
        doSearch(query);
    }

    @Test
    public void termRangeQuery() {
        //Query query = new TermRangeQuery("description"," "," ",true,true);
    }

    @Test
    public void prefixQueryTest() {
        Term term = new Term("description", "solr");
        PrefixQuery query = new PrefixQuery(term);
        doSearch(query);
    }

    private void matched(String[] phrase, int slop) {
        PhraseQuery query = new PhraseQuery();
        query.setSlop(slop);
        for (String word : phrase) {
            query.add(new Term("description", word));
        }
        doSearch(query);
    }

    @Test
    public void testSlopcomprsion() {
        String[] phrase = new String[] { "licensed", "Apache" };
        this.matched(phrase, 2);
    }

    @Test
    public void wildcardQuery() {
        Query query = new WildcardQuery(new Term("description", "*ucene"));
        doSearch(query);
    }

    @Test
    public void fuzzyQuery() {
        Query query = new FuzzyQuery(new Term("description", "lucene"));
        doSearch(query);
    }

    @Test
    public void matchAllDocsQuery() {
        Query query = new MatchAllDocsQuery();
        doSearch(query);
    }

    @Test
    public void testsToString() {
        BooleanQuery query = new BooleanQuery();
        query.add(new FuzzyQuery(new Term("description", "lucene")), Occur.MUST);
        Query q2 = NumericRangeQuery.newFloatRange("price", 50f, 56f, false, true);
        query.add(q2, Occur.MUST);
        System.out.println(query);
    }

    @Test
    public void testTermRangeQuery() throws ParseException {
        Analyzer analyzer = new IKAnalyzer();
        Query query = new QueryParser(Version.LUCENE_4_10_4, "subject", analyzer).parse("price:[ 50f TO 56f]");
        System.out.println(query);
        doSearch(query);
    }

    @Test
    public void testPhraseQuery() throws ParseException {
        Analyzer analyzer = new StandardAnalyzer();
        //Query query = new QueryParser(Version.LUCENE_4_10_4,"field",analyzer).parse("This is Some Phrase");
        QueryParser query = new QueryParser(Version.LUCENE_4_10_4, "field", analyzer);
        query.setPhraseSlop(5);
        Query q = query.parse("This is Some Phrase");
        System.out.println(q);
    }

    @Test
    public void testFuzzyQuery() throws ParseException {
        Analyzer analyzer = new StandardAnalyzer();
        //Query query = new QueryParser(Version.LUCENE_4_10_4,"field",analyzer).parse("This is Some Phrase");
        QueryParser query = new QueryParser(Version.LUCENE_4_10_4, "subject", analyzer);
        Query q = query.parse("kountry~");
        System.out.println(q);
    }

    @Test
    public void testAnalyzer() {
        Document doc = new Document();
        doc.add(new Field("title", "This is the tilee", Field.Store.YES, Field.Index.ANALYZED));
    }

}