lucene建立索引和各种方式的搜索
2017-08-10 22:22
387 查看
lucene建立索引、FuzzyQuery方式检索(可以简单地识别两个相近的词语)、PrefixQuery方式检索(前缀查询)、RangeQuery方式查询(在某个范围)、TermQuery方式查询(词条搜索)
lucene建立索引
FuzzyQuery方式检索(可以简单地识别两个相近的词语)
PrefixQuery方式检索(前缀查询)
RangeQuery方式查询(在某个范围)
TermQuery方式查询(词条搜索)
lucene建立索引
package testindex; 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.IndexWriter; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; public class TestIndex { /** * user(id,name,address) * insert into user(id,name,address) values(1,'zhangsan','shanghaichangningqv'); * @throws IOException */ public static void main(String[] args) throws IOException { String [] ids={"1","2","3"}; String [] names={"zhangsan","lisi","wangwu"}; String [] addresses={"shanghai","beijing","guangzhou"}; String [] birthday={"19820903","19920603","19850603"}; Analyzer analyzer=new StandardAnalyzer(); String indexDir="C:/Users/yihong/Desktop/luceneindex"; Directory dir=FSDirectory.getDirectory(indexDir); //true 表示创建或覆盖当前索引;false表示对当前索引进行追加 //Default value is 128 IndexWriter writer=new IndexWriter(dir,analyzer,true,IndexWriter.MaxFieldLength.LIMITED); for(int i=0;i<ids.length;i++){ Document document=new Document(); document.add(new Field("id",ids[i],Field.Store.YES,Field.Index.ANALYZED)); document.add(new Field("name",names[i],Field.Store.YES,Field.Index.ANALYZED)); document.add(new Field("address",addresses[i],Field.Store.YES,Field.Index.ANALYZED)); document.add(new Field("birthday",birthday[i],Field.Store.YES,Field.Index.ANALYZED)); writer.addDocument(document); } writer.optimize(); writer.close(); } }
FuzzyQuery方式检索(可以简单地识别两个相近的词语)
package TestSercher; 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.index.Term; import org.apache.lucene.search.FuzzyQuery; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; public class TestFuzzyQuery { public static void main(String[] args) throws IOException { Analyzer analyzer=new StandardAnalyzer(); String indexDir="C:/Users/yihong/Desktop/luceneindex"; Directory dir=FSDirectory.getDirectory(indexDir); IndexSearcher searcher=new IndexSearcher(dir); ScoreDoc [] hits=null; Term term=new Term("name","zhangsan"); FuzzyQuery query=new FuzzyQuery(term); TopDocs topDocs=searcher.search(query, 10); hits=topDocs.scoreDocs; for(int i=0;i<hits.length;i++){ Document doc=searcher.doc(hits[i].doc); // System.out.print(hits[i].score+" "); System.out.print(doc.get("id")+" "); System.out.print(doc.get("name")+" "); System.out.print(doc.get("address")+" "); System.out.println(doc.get("birthday")+" "); } searcher.close(); dir.close(); } }
PrefixQuery方式检索(前缀查询)
package TestSercher; 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.index.Term; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.PrefixQuery; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; public class TestPrefixQuery { public static void main(String[] args) throws IOException { Analyzer analyzer=new StandardAnalyzer(); String indexDir="C:/Users/yihong/Desktop/luceneindex"; Directory dir=FSDirectory.getDirectory(indexDir); IndexSearcher searcher=new IndexSearcher(dir); ScoreDoc [] hits=null; Term term=new Term("name","zh"); PrefixQuery query=new PrefixQuery(term); TopDocs topDocs=searcher.search(query, 10); hits=topDocs.scoreDocs; for(int i=0;i<hits.length;i++){ Document doc=searcher.doc(hits[i].doc); // System.out.print(hits[i].score+" "); System.out.print(doc.get("id")+" "); System.out.print(doc.get("name")+" "); System.out.print(doc.get("address")+" "); System.out.println(doc.get("birthday")+" "); } searcher.close(); dir.close(); } }
RangeQuery方式查询(在某个范围)
package TestSercher; 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.index.Term; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.RangeQuery; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; public class TestRangeQuery { public static void main(String[] args) throws IOException { Analyzer analyzer=new StandardAnalyzer(); String indexDir="C:/Users/yihong/Desktop/luceneindex"; Directory dir=FSDirectory.getDirectory(indexDir); IndexSearcher searcher=new IndexSearcher(dir); ScoreDoc [] hits=null; Term beginTerm=new Term("birthday","19820720"); Term endTerm=new Term("birthday","19830130"); RangeQuery query=new RangeQuery(beginTerm,endTerm,true); TopDocs topDocs=searcher.search(query, 2); hits=topDocs.scoreDocs; for(int i=0;i<hits.length;i++){ Document doc=searcher.doc(hits[i].doc); // System.out.print(hits[i].score+" "); System.out.print(doc.get("id")+" "); System.out.print(doc.get("name")+" "); System.out.print(doc.get("address")+" "); System.out.println(doc.get("birthday")+" "); } searcher.close(); dir.close(); } }
TermQuery方式查询(词条搜索)
package TestSercher; 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.index.Term; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; public class TestSercher { public static void main(String[] args) throws IOException { Analyzer analyzer=new StandardAnalyzer(); String indexDir="C:/Users/yihong/Desktop/luceneindex"; Directory dir=FSDirectory.getDirectory(indexDir); IndexSearcher searcher=new IndexSearcher(dir); ScoreDoc [] hits=null; Term term=new Term("address","beijing"); TermQuery query=new TermQuery(term); TopDocs topDocs=searcher.search(query, 10); hits=topDocs.scoreDocs; for(int i=0;i<hits.length;i++){ Document doc=searcher.doc(hits[i].doc); System.out.print(hits[i].score+" "); System.out.print(doc.get("id")+" "); System.out.print(doc.get("name")+" "); System.out.print(doc.get("address")+" "); System.out.println(doc.get("birthday")+" "); } searcher.close(); dir.close(); } }
相关文章推荐
- lucene(全文搜索)_根据内容建立索引_源码下载
- 用Lucene.net对数据库建立索引及搜索<转>
- Lucene 建立索引和搜索
- 用lucene为数据库搜索建立增量索引
- 用lucene为数据库搜索建立 增量索引
- 针对Lucene 建立索引过程与搜索过程耗费时间的矛盾一点思路
- [转]用Lucene.net对数据库建立索引及搜索
- 用lucene为数据库搜索建立增量索引
- Lucene建立索引搜索入门实例
- LuceneDemo类的演示案例:建立索引、建立搜索,另外建立一个测试类TestLucene(用到JUnit)
- lucene的建立索引,搜索,中文分词
- Lucene2.9.2 + 盘古分词2.3.1(一) 入门: 建立简单索引,搜索(原创)
- lucene3.5学习笔记02--创建索引和建立搜索
- lucene(全文搜索)_建立索引_根据关键字全文搜索_源码下载
- 使用Lucene对建立的索引进行搜索
- 用Lucene.net对数据库建立索引及搜索 (2)
- 用Lucene.net对数据库建立索引及搜索
- 用lucene为数据库搜索建立增量索引
- 用lucene为数据库搜索建立 增量索引
- 用Lucene[1].net对数据库建立索引及搜索+