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;
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 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();
}
}