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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Lucene BooleanQuery相关算法

發(fā)布時間:2023/10/11 综合教程 130 老码农
生活随笔 收集整理的這篇文章主要介紹了 Lucene BooleanQuery相关算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

BooleanQuery對兩種不同查詢場景執(zhí)行不同的算法:

場景1:

所有的子句都必須滿足,而且所有的子句里沒有嵌套BooleanQuery。

例:

a    AND    b    AND    c

上面語句表示要同時包含a,b,c三個字符(詞元)的文檔,假如現(xiàn)在索引里包含a的文檔有4,6,8;b的文檔有:2,4,6;c的文檔有:3,4,5,這個語句就是找出編號為4的這個文檔。

注:在倒排索引里存儲的包含某個詞元的文檔列表都是從小到大排列的。

初始狀態(tài)如下:

a b c
-> 4 -> 2 -> 3
6 4 4
8 6 5

指針表示當(dāng)前遍歷到哪個文檔

第一步:按照每個詞元文檔列表的第一個文檔對詞元排序。排序以后的狀態(tài)如下:

b c a
-> 2 -> 3 -> 4
4 4 6
6 5 8

第二步:判斷第一個詞元(b)的當(dāng)前遍歷文檔(2)是否小于最后一個詞元(a)的當(dāng)前遍歷文檔(4)。如果小于,則表示第一個詞元的當(dāng)前遍歷文檔不是符合的文檔,如果是符合的最后一個詞元的當(dāng)前文檔應(yīng)該和第一個詞元的相同。

第三步: 第一個詞元文檔位置(2)跳轉(zhuǎn)到最后一個詞元的當(dāng)前遍歷的文檔(4),跳轉(zhuǎn)以后的狀態(tài)如下:

b c a
2 -> 3 -> 4
-> 4 4 6
6 5 8

第四步: 將第一個詞元放到詞元列表最后,重置位置后狀態(tài)如下:

c a b
-> 3 -> 4 2
4 6 -> 4
5 8 6

重復(fù)第二、三、四步,直到找到第一個詞元的當(dāng)前遍歷文檔ID和最后一個詞元的相同,則這個文檔就是符合查詢要求的文檔。

這種場景的代碼實(shí)現(xiàn)在ConjunctionScorer類里,主要的代碼邏輯在方法doNext里:

 while (more && first().doc() < last().doc()) { // find doc w/ all clauses
more = first().skipTo(last().doc()); // skip first upto last
scorers.addLast(scorers.removeFirst()); // move first to last
}

這里會不斷的判斷第一個詞元的當(dāng)前文檔是否小于最后一個詞元的當(dāng)前文檔,如果不相同,則第一個詞元的文檔跳轉(zhuǎn)到最后一個詞元的文檔位置。

排序是在第一次進(jìn)去的時候在init方法里做的。

場景2:

除了上面第一種場景就是第二種場景,第一種場景因?yàn)榕判虻脑?,不需要遍歷所有的文檔,第二種場景需要遍歷所有的文檔。

第二種場景的實(shí)現(xiàn)在BooleanScorer類里,

每次往BooleanScorer類里添加一個子句,會記錄當(dāng)前這個子句的序號和這個子句的定義,是必須滿足還是必須不滿足。這個數(shù)據(jù)記錄在requiredMask和prohibitedMask中,這兩個數(shù)是int類型,里面每一位都代表一個子句。requiredMask記錄了哪些子句必須滿足;prohibitedMask記錄了哪些子句必須不能滿足。比如一共有5個子句,1、3、5必須滿足,2、4必須不能滿足,則requiredMask二進(jìn)制的值為: 10101。prohibitedMask的值為: 01010。

當(dāng)調(diào)用next的時候會批量從各子句中取出符合這些子句的部分文檔(文檔ID批范圍,1024為一批)到內(nèi)存中的一個緩存BucketTabke里,在這個緩存里會根據(jù)文檔ID進(jìn)行聚合(Bucket),每個文檔ID都有個滿足哪些子句的屬性bits。

然后遍歷這些文檔,那些bits里包含所有必須符合子句且不包含所有必須排查子句的文檔是最終符合的文檔。這個判斷是通過bits和上面requiredMask和prohibitedMask做位運(yùn)算實(shí)現(xiàn)的。

if ((current.bits & prohibitedMask) == 0 &&
(current.bits & requiredMask) == requiredMask) {
return true;
}

總結(jié)

以上是生活随笔為你收集整理的Lucene BooleanQuery相关算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 黄色片99 | 国av在线| 日本欧美色 | fc2成人免费视频 | 亚洲AV无码乱码国产精品牛牛 | 久久99久久99精品蜜柚传媒 | 1024欧美| 国产中文字幕亚洲 | 欧美日韩国产网站 | 日本欧美一区二区三区不卡视频 | 一本大道久久a久久精二百 琪琪色在线视频 | 亚洲三级久久 | 亚洲 高清 成人 动漫 | 亚洲成人第一网站 | 奇米影视盒| 久热免费视频 | 亚洲日本国产精品 | 免费的毛片| 加勒比hezyo黑人专区 | 五月亚洲| 欧美日韩国产色 | 国产欧美精品一区 | 久久久久国产精品视频 | 成人免费视频软件网站 | 国产三级精品在线观看 | 精品国产一区二区三区在线观看 | 精品人妻在线播放 | 综合五月激情 | 天天鲁一鲁摸一摸爽一爽 | 天天添天天射 | 欧美日韩在线视频一区 | 国产永久精品 | 97看片吧| 99精品欧美一区二区三区 | 日本色站 | 在线观看亚洲免费视频 | 中文字幕乱伦视频 | 羞羞漫画在线播放 | 日本久久久久久久久久久 | 亚洲久久视频 | 亚洲天堂手机在线 | 涩涩免费网站 | 成人毛片18女人毛片免费 | 五月天伊人网 | 欧美激情不卡 | 日韩一级一级 | 黄色大片网 | 国产中文字幕第一页 | 国产精品免费入口 | 97人人视频| 一区二区在线视频免费观看 | 国产精品乱码久久久久久久久 | 免费毛片一区二区三区久久久 | 青青视频一区二区 | 男女互操视频 | 性巴克成人免费网站 | 国产美女三级无套内谢 | 天天摸天天操天天爽 | 高潮无码精品色欲av午夜福利 | 国产又爽又黄无码无遮挡在线观看 | 久久99精品视频 | 国产福利在线观看视频 | 国产成人无遮挡在线视频 | 欧美高清一级 | japanesehdxxxx| 人人曰| 欧美日韩精品国产 | 亚洲国产精品无码久久久 | 欧美a级片在线观看 | 亚洲精品尤物 | 91精品国产91综合久久蜜臀 | 日韩一级片网址 | 日日摸日日添日日碰9学生露脸 | 婷婷九月| 欧美性一级片 | 销魂美女一区二区 | 国产毛片一区 | 欧美精品日韩在线 | 亚洲图片欧美 | 四虎精品 | 激情五月综合色婷婷一区二区 | 一区二区三区日韩视频 | 国产精品成熟老女人 | 人人澡人人爽 | 好男人www社区 | 啪啪网站免费看 | 国产va| 精品一区二区三区精华液 | 色女人在线 | 国产淫语| 3d成人动漫在线观看 | 91精品久久久久久久久中文字幕 | 国产一区视频在线观看免费 | 亚洲激情五月 | aaa级黄色片| 亚洲专区视频 | 欧美一区二区三区小说 | 国产午夜视频在线播放 | 在线观看成人动漫 |