lucene的丰富的各种查询
term查詢、queryParser查詢 ,booleanQuery
package?search;
import?org.apache.lucene.analysis.standard.StandardAnalyzer;
import?org.apache.lucene.index.Term;
import?org.apache.lucene.queryParser.QueryParser;
import?org.apache.lucene.search.BooleanQuery;
import?org.apache.lucene.search.Hits;
import?org.apache.lucene.search.IndexSearcher;
import?org.apache.lucene.search.Query;
import?org.apache.lucene.search.TermQuery;
import?org.apache.lucene.store.Directory;
import?org.apache.lucene.store.FSDirectory;
public?class?Searcher?{
????public?static?void?termQuery()?throws?Exception{
????????Directory?directory?=?FSDirectory.getDirectory("./index",?false);?
????????IndexSearcher?searcher?=?new?IndexSearcher(directory);
????????Term?t?=?new?Term("body","document");
????????Query?query?=?new?TermQuery(t);
????????Hits?hits?=?searcher.search(query);
????????System.out.println(hits.length());
????}
????public?static?void?queryParser()?throws?Exception{
????????Directory?directory?=?FSDirectory.getDirectory("./index",?false);?
????????IndexSearcher?searcher?=?new?IndexSearcher(directory);
????????Query?query?=?QueryParser.parse("text","body",new?StandardAnalyzer());
????????Hits?hits?=?searcher.search(query);
????????System.out.println(hits.length());
????}
????public?static?void?booleanQuery()?throws?Exception{
????????Query?parseQuery?=?QueryParser.parse("text","body",new?StandardAnalyzer());
????????Term?t?=?new?Term("body","document");
????????Query?termQuery?=?new?TermQuery(t);
????????BooleanQuery?boolQuery?=?new?BooleanQuery();
????????boolQuery.add(parseQuery,true,false);
????????boolQuery.add(termQuery,true,false);
????????
????????Directory?directory?=?FSDirectory.getDirectory("./index",?false);?
????????IndexSearcher?searcher?=?new?IndexSearcher(directory);
????????Hits?hits?=?searcher.search(boolQuery);
????????System.out.println(hits.length());
????}
????public?static?void?main(String[]?args)?throws?Exception{
????????termQuery();
????????queryParser();
????????booleanQuery();
????}
}
?
?
和上文一樣,列寫lucene的查詢用法
包括了RangeQuery? prefixQuery? phraseQuery? wildcastQuery?? fuzzyQuery
被索引查詢的文件,按照需求自己構造即可。
package?search;
import?java.io.BufferedReader;
import?java.io.File;
import?java.io.FileInputStream;
import?java.io.InputStreamReader;
import?java.text.SimpleDateFormat;
import?java.util.Date;
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.index.Term;
import?org.apache.lucene.search.FuzzyQuery;
import?org.apache.lucene.search.Hits;
import?org.apache.lucene.search.IndexSearcher;
import?org.apache.lucene.search.PhraseQuery;
import?org.apache.lucene.search.PrefixQuery;
import?org.apache.lucene.search.Query;
import?org.apache.lucene.search.RangeQuery;
import?org.apache.lucene.search.TermQuery;
import?org.apache.lucene.search.WildcardQuery;
import?org.apache.lucene.store.Directory;
import?org.apache.lucene.store.RAMDirectory;
public?class?SearcherShow?{
????private?static?Directory?directory?=?new?RAMDirectory();
????public?static?void?preIndex()?throws?Exception{
????????String?fileName1?=?"./data/searchShow.txt";
????????String?fileName2?=?"./data/searchShow2.txt";
????????String?fileName3?=?"./data/test.txt";
????????IndexWriter?writer?=?new?IndexWriter(directory,new?StandardAnalyzer(),true);
????????Document?doc1?=?getDocument(fileName1);
????????Document?doc2?=?getDocument(fileName2);
????????Document?doc3?=?getDocument(fileName3);
????????writer.addDocument(doc1);
????????writer.addDocument(doc2);
????????writer.addDocument(doc3);
????????writer.close();
????????
????}
????//先建立索引才能執行
????
????//termQuery???rangeQuery???booleanQuery的查詢在Searcher類中
????public?static?void?rangeQuery()?throws?Exception{
????????Term?startTerm?=?new?Term("lastmodified","20070620");
????????Term?endTerm?=?new?Term("lastmodified","20070622");
????????RangeQuery?query?=?new?RangeQuery(startTerm,endTerm,true);
????????IndexSearcher?searcher?=?new?IndexSearcher(directory);
????????Hits?hits?=?searcher.search(query);
????????prtHits(hits);
????}
????public?static?void?prefixQuery()?throws?Exception{
????????Term?term?=?new?Term("fileName","searchShow.txt");
????????Term?prefixterm?=?new?Term("fileName","searchShow");
????????IndexSearcher?searcher?=?new?IndexSearcher(directory);
????????Query?query?=?new?TermQuery(term);
????????Query?prefixQuery?=?new?PrefixQuery(prefixterm);
????????Hits?hits?=?searcher.search(query);
????????Hits?prefixHits?=?searcher.search(prefixQuery);
????????prtHits(hits);
????????System.out.println("----------");
????????prtHits(prefixHits);
????}
????public?static?void?phraseQuery()?throws?Exception{
????????IndexSearcher?searcher?=?new?IndexSearcher(directory);
????????PhraseQuery?query?=?new?PhraseQuery();
????????query.setSlop(2);
????????query.add(new?Term("contents","quick"));
????????query.add(new?Term("contents","fox"));
????????Hits?hits?=?searcher.search(query);
????????prtHits(hits);
????}
????public?static?void?wildcardQuery()?throws?Exception{
????????IndexSearcher?searcher?=?new?IndexSearcher(directory);
????????Query?query?=?new?WildcardQuery(new?Term("contents","?ild*"));
????????Hits?hits?=?searcher.search(query);
????????prtHits(hits);
????}
????public?static?void?fuzzyQuery()?throws?Exception{
????????IndexSearcher?searcher?=?new?IndexSearcher(directory);
????????Term?term?=?new?Term("contents","wuzza");
????????FuzzyQuery?query?=?new?FuzzyQuery(term);
????????Hits?hits?=?searcher.search(query);
????????prtHits(hits);
????}
????public?static?Document?getDocument(String?fileName)?throws?Exception{
????????File?file?=?new?File(fileName);
????????Document?doc?=?new?Document();
????????doc.add(Field.Keyword("fileName",file.getName()?));
????????Date?modified?=?new?Date(file.lastModified());
????????String?lastmodified?=?new?SimpleDateFormat("yyyyMMdd").format(modified);
????????doc.add(Field.Keyword("lastmodified",?lastmodified));
????????BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(
????????????????new?FileInputStream(file)));
????????StringBuffer?sb?=?new?StringBuffer();
????????String?line?=?null;
????????while?((line?=?br.readLine())?!=?null)?{
????????????sb.append(line);
????????}
????????br.close();
????????doc.add(Field.Text("contents",sb.toString()?));
????????return?doc;
????}
????public?static?void?prtHits(Hits?hits)?throws?Exception{
????????for(int?i=0;i<hits.length();i++){
????????????Document?doc?=?hits.doc(i);
????????????System.out.println(doc.get("fileName"));
????????????System.out.println(doc.get("lastmodified"));
????????}
????}
????public?static?void?main(String[]?args)?throws?Exception{
????????preIndex();
//????????rangeQuery();
//????????prefixQuery();
//????????phraseQuery();
//????????wildcardQuery();
????????fuzzyQuery();
????}
}
?
轉載于:https://www.cnblogs.com/pony/archive/2009/05/21/1486284.html
總結
以上是生活随笔為你收集整理的lucene的丰富的各种查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 64位系统上安装apache
- 下一篇: 开通博客了