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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Lucene6去掉了Filter但是可以用BooleanQuery实现Filter查询

發(fā)布時間:2024/1/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lucene6去掉了Filter但是可以用BooleanQuery实现Filter查询 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Lucene在6.0版本之后徹底廢除了Filter的使用,采用BooleanQuery來實現(xiàn)Filter的功能,核心代碼如下:

TermQuery termQuery = new TermQuery(new Term("content",""));
TermQuery termQuery1 = new TermQuery(new Term("content",""));
BooleanQuery.Builder builder = new BooleanQuery.Builder();//構造booleanQuery
builder.add(termQuery, BooleanClause.Occur.FILTER); //BooleanClause.Occur.FILTER 設置為過濾,這個termQuery包含的就相當于Filter
builder.add(termQuery1, BooleanClause.Occur.FILTER);//這個同上,也就是可以添加多個Filter

(對Lucene6之前的Filter不夠熟悉的請看這個:http://www.cnblogs.com/forfuture1978/archive/2010/05/19/1738805.html)

?

下面給出具體代碼,大家可以試一試:

?

package Query;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;

import java.io.IOException;
import java.nio.file.Paths;

/**
* Created by jet on 2017/7/31.
*/
public class BooleanQueryTest {
public static void main(String[] args) throws IOException {

index();
search();
}

public static void search() throws IOException {
Directory dir = FSDirectory.open(Paths.get("booleanIndex"));
IndexSearcher searcher = new IndexSearcher(DirectoryReader.open(dir));

TermQuery termQuery = new TermQuery(new Term("content",""));
TermQuery termQuery1 = new TermQuery(new Term("content",""));

long start = System.currentTimeMillis();
//construct a boolean query to test filter function.
BooleanQuery.Builder builder = new BooleanQuery.Builder();
//booleanQuery 中使用filter查詢也可以讓該部分的查詢結果不參與打分
builder.add(termQuery, BooleanClause.Occur.FILTER);
builder.add(termQuery1, BooleanClause.Occur.FILTER);
BooleanQuery booleanQuery = builder.build();

TopDocs hits = searcher.search(booleanQuery,10);
long end = System.currentTimeMillis();
System.out.println("totalhits: " + hits.totalHits);
System.out.println("How long it takes to search: "+(end-start));
for (ScoreDoc scoredoc:hits.scoreDocs
) {
Document doc = searcher.doc(scoredoc.doc);
System.out.println("score: "+ scoredoc.score);
System.out.println("getFields: "+doc.get("content"));
System.out.println(doc.get("FileName"));

}
}

public static void index() throws IOException {
String str ="權聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉載。\n" ;
String str1= "作為一個合格的程序員,往往是能夠很好的管理自己的程序的,尤其是對于長期處于純研發(fā)中心,甚至軟件園的程序員朋友們,無論是上班還是下班,甚至課外活動,碰到的都是具有相同思維的人群,進而容易覺得好像大部分人都是相同的思維方式。因而當程序員成為管理者后,往往習慣于將程序員當做程序一樣進行管理。\n" +
"\n" + "然而程序員不是程序,是有血有肉的人,所以也呈現(xiàn)出很多與程序不同";
String str2="首先,程序是有確定的輸入和輸出的,一般對于特定的輸入,一定會得到特定的輸出,一般規(guī)定了輸入輸出,也就確定了接口,對其中的具體實現(xiàn)不用關心,對于成熟的公共模塊,也不用擔心其維護,可放心的使用,達到一勞永逸的效 ";
String str3= " 而程序員不是,不是任何對程序員的輸入,都會帶來特定的輸出的。";
String str4= "無論是源代碼維護,文檔,持續(xù)集成,設計模式,架構等,很多都深入程序員的思想中,甚至成為日常生活中的一種思維方式。";
Directory dir = FSDirectory.open(Paths.get("booleanIndex"));
// Directory dir = new RAMDirectory();
StandardAnalyzer analyzer = new StandardAnalyzer();
IndexWriterConfig config = new IndexWriterConfig(analyzer);
config.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND);
IndexWriter writer = new IndexWriter(dir,config);
Document document = new Document();
Document document1 = new Document();
Document document2 = new Document();
Document document3 = new Document();
Document document4 = new Document();
document.add(new Field("content",str, TextField.TYPE_STORED));
document1.add(new Field("content",str1, TextField.TYPE_STORED));
document2.add(new Field("content",str2, TextField.TYPE_STORED));
document3.add(new Field("content",str3, TextField.TYPE_STORED));
document4.add(new Field("content",str4, TextField.TYPE_STORED));
writer.addDocument(document);
writer.addDocument(document1);
writer.addDocument(document2);
writer.addDocument(document3);
writer.addDocument(document4);
writer.close();
}
}

轉載于:https://www.cnblogs.com/jetHu/p/7270775.html

總結

以上是生活随笔為你收集整理的Lucene6去掉了Filter但是可以用BooleanQuery实现Filter查询的全部內容,希望文章能夠幫你解決所遇到的問題。

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