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

lucene Query搜索

2017-08-14 23:28 108 查看
WildcardQuery通配符查询,给整个文本建立索引,通过通配符匹配搜索,通过通配符的全文搜索

WildcardQuery通配符查询

package TestQuery;

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.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
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.search.WildcardQuery;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class TestBooleanQuery {
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 nterm=new Term("name","*g??");
WildcardQuery wildcardQuery=new WildcardQuery(nterm);
Term aterm=new Term("address","tianjing");
TermQuery termQuery=new TermQuery(aterm);
BooleanQuery query=new BooleanQuery();
query.add(wildcardQuery, BooleanClause.Occur.SHOULD);
query.add(termQuery, BooleanClause.Occur.MUST_NOT);
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();

}
}


给整个文本建立索引

package TestQuery;

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

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
impor
4000
t 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 TestFileReaderForIndex {
public static void main(String[] args) throws IOException {
File file=new File("F:/java学习/java搜索及网页爬虫/01、Lucene视频教程/01 lucene基础/code/data.txt");
FileReader fRead=new FileReader(file);
char [] chs=new char [60000];
fRead.read(chs);

String strtemp=new String(chs);

String [] strs=strtemp.split("Database: Compendex");

System.out.println(strs.length);
for(int i=0;i<strs.length;i++){
strs[i]=strs[i].trim();

}

Analyzer analyzer=new StandardAnalyzer();
String indexDir="C:/Users/yihong/Desktop/luceneindex";
Directory dir=FSDirectory.getDirectory(indexDir);

IndexWriter writer=new IndexWriter(dir,analyzer,false,IndexWriter.MaxFieldLength.UNLIMITED);

for(int i=0;i<strs.length;i++){
Document document=new Document();

document.add(new Field("contents",strs[i],Field.Store.YES,Field.Index.ANALYZED));
writer.addDocument(document);
}
writer.optimize();
writer.close();
dir.close();
System.out.println("index ok!");
}
}


通过通配符匹配搜索

package TestQuery;

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.TopDocs;
import org.apache.lucene.search.WildcardQuery;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

public class TestWildcardQuery {
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","*g???");
WildcardQuery query=new WildcardQuery(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();

}
}


通过通配符的全文搜索

package TestQuery;

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 TestWildcardQuery1 {
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("contents","modeling");
//      WildcardQuery query=new WildcardQuery(term);
TermQuery query=new TermQuery(term);
TopDocs topDocs=searcher.search(query, 126);

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.println(doc.get("contents")+" ");
}
searcher.close();
dir.close();

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