国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

WebGIS中解決使用Lucene進行興趣點搜索排序的兩種思路

2019-11-15 00:04:32
字體:
來源:轉載
供稿:網友
WebGIS中解決使用Lucene進行興趣點搜索排序的兩種思路1.背景

目前跟信息采集相關的一個項目提出了這樣的一個需求:中國銀行等一些部門和政府關系較好,需要在興趣點搜索時優先顯示他們。

我們的興趣點查詢是使用的Lucene進行分詞查詢的,這涉及到我們要對我們搜索出來的結果進行一次優先級排序。這里,我和大家一起探討解決此問題的兩種方案。

2.字典創立時對字典文檔設置優先級2.1.通過Document的setBoost來建立文檔優先級

在Lucene4.0前,Document可以通過setBoost來設立文檔的優先級。流程圖為:

但是,此方法在Lucene4.0之后不能使用,因為此之后去掉了Document可以直接setBoost的方法。

2.2.通過對數據源進行排序來解決建立字典文檔優先級

在項目中,數據存放在數據庫中,索引是建立在數據庫的該興趣點表上,于是我們可以改變我們的思路,即直接對查詢所得的數據先進行排序,然后再建立索引。

下面我們具體講下實施方案。

2.2.1.修改興趣點表,增加排序字段

這里,我們增加了一個ORDERINDEX排序字段。

2.2.2.在代碼中對數據源進行排序,然后生成字典

2.2.3.測試例子

符合郵局關鍵字段的數據有多個,我們將北新橋郵局后面的ORDERINDEX修改為1,如果我們輸入郵局,能將北新橋郵局后門首先返回,則表示方法成功。

結果展示:

3. 分詞查詢時,通過設置query 影響排序3.1.思路分析

我們首先可以在創建Document時,增加一個field。該field默認值為false。當我們需要創建的字符串滿足優先查詢字符串時,則將該field的值改為true.

然后,再創建查詢條件時,增加一個建立在field的查詢條件,該查詢條件為should型,查詢值為true,并且設置其對query的影響為低。

流程圖為:

3.2.具體實現3.2.1增加類score字段

3.2.2增加query影響條件

4.總結

在代碼中通過setBoost有如下幾個缺點:

a.增加了代碼開發量

b.在構建索引字典中遍歷是否滿足優先條件,比較耗時。

鑒于以上缺點,選擇直接通過數據源排序構建索引字典是比較好的方式。

5.擴展

由于Lucene中分詞的粒度很難控制,比如郵局二字。當我們輸入郵或者郵局時,是可以有查詢結果的。但是輸入局時卻不能。

針對此種問題,基于Lucene的分詞條件進行修改和擴展,是能根本解決問題的方法之一,但是學習成本略大。

此處我選擇了一種折中的方式來解決,即分詞查詢后判斷查詢結果是否為空,如果是空,則觸發數據庫查詢。

當然,觸發數據庫查詢的前提是,興趣點不能過多。一般項目中興趣點均在10W以內,所以數據庫查詢消耗時間是有限的。

而為什么不直接使用數據庫查詢是在于:

a.分詞查詢可以加速查詢效率。

b.分詞查詢避免數據庫查詢使用過多的like關鍵字。

c.分詞查詢可以建立對拼音檢索的支持。

——歡迎轉載,但保留版權,請于明顯處標明出處:http://www.survivalescaperooms.com/naaoveGIS/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 铜陵市| 精河县| 霞浦县| 九龙城区| 宝清县| 芜湖县| 新绛县| 乌鲁木齐县| 庆云县| 平顺县| 佛山市| 合川市| 布尔津县| 当涂县| 古交市| 平潭县| 青浦区| 临汾市| 南华县| 乐山市| 慈溪市| 乌拉特中旗| 清水河县| 南投县| 舞钢市| 平凉市| 准格尔旗| 涞源县| 武川县| 龙游县| 兰西县| 德清县| 凤台县| 囊谦县| 开鲁县| 胶南市| 砚山县| 手游| 西乌珠穆沁旗| 靖安县| 泸水县|