您的位置:首页 > 产品设计 > UI/UE

lucene建立索引和各种方式的搜索

2017-08-10 22:22 387 查看
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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息