日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lucene的丰富的各种查询

發布時間:2025/1/21 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lucene的丰富的各种查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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的丰富的各种查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。