Java tutorial
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)); } }