lucene SpanQuery跨度查詢基礎

2021-08-30 09:33:08 字數 2263 閱讀 5641

1、跨度查詢spanquery5個子類

spanquery型別描述

spantermquery和其他跨度查詢結合使用,單獨使用相當於termquery

spanfirstquery用來匹配域中的第乙個部分內的各個spans

spannearquery用來匹配臨近的spans

spannotquery用來匹配不重疊的spans

spanorqueryspan查詢的聚合匹配

2、測試spanquery

public class spanquerytest extends testcase

privatevoid assertonlybrownfox(query query) throw***ception{//檢查是否返回乙個匹配結果

hits hits=searcher.search(query);

assertequals(1,hits.length());

assertequals("wrong doc",0,hits.id(0));

privatevoid assertbothfoxes(query query) throw***ception{//檢查是否返回2個匹配結果

hits hits=searcher.search(query);

assertequals(2.hits.length());

privatevoid assertnotmatch(query query) throws exception{

hits hits=searcher.search(query);

assertequals(0,hits.length());

3、使用spantermquery類,它匹配文件的方式與termquery相似,但是它會記錄乙個文件中的相同項在文件中出現的不同位置。

spanquery物件一直跟蹤它所匹配的結果:對於每個正進行匹配的文件,它記錄下被匹配的查詢文字的所有起點和終點位置(以語彙單元為乙個位置)。

dumpspans(new spantermquery(newterm("f","the")));//查詢文字為the,帶the的所有文件,並顯示查詢細節

定義乙個方法dumpspans()呼叫spanquery的一些底層api為我們查詢細節。

public void dumpspans(spanquery query) throws ioexception{

spansspans=query.getspans(reader);

system.out.println(query+":");

intnumspans=0;

hit****s=searcher.search(query);

floatscores=new float[2];

for (inti0;iscores[hits.id(i)]=hits.score(i);

while(spans.next()){//spans裡是單個查詢文字匹配情況情況,記錄著query在文件中的位置,

//next表示query在文件中的下乙個位置,以及查詢文字所在的文件號

numspans++;

int id=spans.doc();

document doc=reader.document(id);

tokentokens=anaylzerutilts.tokensfromanalysis(analyzer,doc.get("f"));

stringbuffer buffer=new stringbuffer();

for (int i=0;iif (i==spans.start()){

if (i+1==spans.end()){

system.out.println(buffer);//輸出spans的查詢文字的在文件中本次出現的資訊。

if(numspans==0){

system.out.println("no spans");//沒有任何匹配

system.out.println();

第1次spans.next迴圈所輸出:quickbrown fox jumps over the lazy dog(0.18123456)

第2次spans.next迴圈所輸出:the quick brown fox jumps overlazy dog(0.18123456)

第3次spans.next迴圈所輸出:quick redfox jumps over thesleep dog(0.18123456)

第4次spans.next迴圈所輸出:the quick red fox jumps oversleepdog(0.18123456)

lucene SpanQuery跨度查詢基礎

1 跨度查詢spanquery5個子類 spanquery型別 描述 spantermquery 和其他跨度查詢結合使用,單獨使用相當於termquery spanfirstquery 用來匹配域中的第乙個部分內的各個spans spannearquery 用來匹配臨近的spans spannotq...

lucene跨度域查詢(一)

一 跨度域查詢 基類是 spanquery 子類 spantermquery 測試用的這個子類當然還有其他 二 測試 public class spantest public indexwriter writer directory dir throws ioexception public voi...

在MySQL中使用子查詢和標量子查詢的基本用法

一 mysql 子查詢 子查詢是將乙個 select 語句的查詢結果作為中間結果,供另乙個 sql 語句呼叫。mysql 支援 sql 標準要求的所有子查詢格式和操作,也擴充套件了特有的幾種特性。子查詢沒有固定的語法,乙個子查詢的例子如下 select from article where uid ...