lucene整理3 排序 過濾 分詞器

2021-08-31 04:36:07 字數 4490 閱讀 8204

1. 排序

1.1. sort類

public sort()

public sort(string field)

public sort(string field,boolean reverse) //預設為false,降序排序

public sort(string fields)

public sort(sortfield field)

public sort(sortfield fields)

sort sort=new sort(「bookname」);按照「bookname「這個field值進行降序排序

sort sort=new sort(「bookname」,true) //公升序排序

sort sort=new sort(new string);按照三個field進行排序,但無法指定公升序排序,所以用sortfield

1.2. sortfield類

public sortfield(string field)

public sortfield(string field,boolean reverse)

public sortfield(string field,int type) //type表示當前field值的型別

public sortfield(string field,int type,boolean reverse) //預設為false,公升序

field值的型別:sortfield.string、sortfield.int、sortfield.float

sortfield sf1=new sortfield(「booknumber」,sortfield.int,false);

sortfield sf2=new sortfield(「bookname」,sortfield.string,false);

1.3. 指定排序的法則

1.3.1.按照文件的得分降序排序

hits hits=searcher.search(query,sort.relevance);

1.3.2.按文件的內部id公升序排序

hits hits=searcher.search(query, sort.indexorder);

1.3.3.按照乙個field來排序

sort sort=new sort();

sortfield sf=new sortfield(「booknumber」,sortfield.int,false);

sort.setsort(sf);

hits hits=searcher.search(query,sort);

1.3.4.按照多個field來排序

sort sort=new sort();

sortfield sf1=new sortfield(「booknumber」,sortfield.int,false);//公升序

sortfield sf2=new sortfield(「publishdate」,sortfield.string,true);//降序

sort.setsort(new sortfield);

hits hits=searcher.search(query,sort);

1.3.5.改變sortfield中的locale資訊

string str1=」我」; string str2=」你」;

collator co1=collator.getinstance(locale.china);

collator co2=collator.getinstance(locale.japan);

system.out.println(locale.china+」:」+co1.compare(str1,str2));

system.out.println(locale.japan+」:」+co2.compare(str1,str2));

輸出結果為:

zh_cn:1

ja_jp:-1

所以public sortfield(string field,locale locale)

public sortfield(string field,locale locale,boolean reverse)

2. 過濾器

使用public hits search(query query,filter filter)

(1)簡單過濾

hits hits=searcher.search(query,new advancedsecurityfilter());//過濾掉securitylevel為0的結果

(2)範圍過濾—rangefilter

只顯示中間的

rangefilter filter=new rangefilter(「publishdate」,」1970-01-01」,」1998-12-31」,true,true」);

hits hits=searcher.search(query,filter);

無上邊界

public static rangefilter more(string fieldname,string lowerterm)

無下邊界

public static rangefilter less(string fieldname,string upperterm)

(3)在結果中查詢queryfilter

rangequery q=new rangequery(new term(「publicshdate」,」1970-01-01」),

new term(「publishdate」,」1999-01-01」),true);

queryfilter filter=new queryfilter(q);

hits hits=searcher.search(query,filter);

3. 分析器analysis

3.1. 自帶分析器和過濾器

3.2. 第三方過分析器

ø         單字分詞

ø 二分法:cjkanalyzer、中科院ictclas分詞、je分詞

ø 詞典分詞

3.2.1.je分詞用法

3.2.1.1. 示例

import jeasy.analysis.mmanalyzer;

indexwriter writer = new indexwriter(index_store_path, new mmanalyzer()

, true);

string str=" lucene是乙個全文檢索引擎的架構,"+

"提供了完整的查詢引擎和索引引擎。lucene以其方便使用、快" +

"速實施以及靈活性受到廣泛的關注。它可以方便地嵌入到各種應用" +

"中實現針對應用的全文索引、檢索功能,本總結使用lucene--2.3.2。";

mmanalyzer analyzer=new mmanalyzer();

trycatch(exception e)

輸出結果:lucene|乙個|全文|檢索|引擎|架構|提供|完整|查詢|。。。。

3.2.1.2. 設定正向最大匹配的字數

mmanalyzer analyzer=new mmanalyzer(4);

3.2.1.3. 新增新詞

mmanalyzer.addword(string word);

mmanalyzer.adddictionary(reader reader);

mmanalyzer analyzer=new mmanalyzer();

mmanalyzer.addword("麥可雷第");

4. 索引的合併

ramdirectory ramdir=new ramdirectory();

indexwriter writer = new indexwriter(ramdir, new standardanalyzer(), true);//刪除原有索引

indexwriter writer2=new indexwriter(fsdirectory.getdirectory(path,true),

new standardanalyzer(), true);

writer.adddocument(doc1);

writer2.adddocument(doc2);

writer.close();

writer2.addindexes(new directory);

writer2.close();

注意:在合併前一定要先關閉要加的索引器。

MySQL查詢 3 排序

為了方便檢視資料,可以對資料進行排序 語法 select from 表名 where order by 列1 asc desc 列2 asc desc,說明 例1 查詢未刪除學生的資訊,按名稱公升序 select from students where is delete 0 order by na...

3 排序檢索資料

3.1 排序資料 使用order by 子句 select prod name from products order by prod name 注意 使用order by 子句時,應該保證它是select語句中的最後一條子句。3.2 按多個列排序 select prod id,prod name,...

3 排序演算法 歸併排序

問題描述 歸併排序演算法對下列例項排序,寫出基於歸併排序演算法對下面例項進行排序的具體過程。a 48,12,61,3,5,19,32,7 解題思想 將n個元素分成2個子集合,分別對子集合進行排序,最終將排好序的子集合合併為有序集合。n 1是中止。如下 include include using na...