基於NEO4J的高級檢索功能

一、需求

基於NEO4J實現類似萬方的高級檢索功能 萬方鏈接
在這裏插入圖片描述

二、創建索引

1、索引自動更新配置

// neo4j.conf設置此項會影響性能 開啓自動更新索引(測試時數值類型字段在全文檢索時無法索引)
apoc.autoIndex.enabled=true	

2、執行帶有索引自動更新配置的過程

CALL apoc.index.addAllNodes('FacebookID', {FacebookID:["CurrentCity","PoliticalViews","Gender"]},{autoUpdate:true});

三、查詢索引

1、LUCENE查詢語法

1、基礎的查詢語法,關鍵詞查詢:
   域名+“:”+搜索的關鍵字
   例如:content:java
2、範圍查詢
   域名+“:”+[最小值 TO 最大值]
   例如:size:[1 TO 1000]
   範圍查詢在lucene中支持數值類型,不支持字符串類型。在solr中支持字符串類型。
3、組合條件查詢
 1)+條件1 +條件2:兩個條件之間是並且的關係and
   例如:+filename:apache +content:apache
 2)+條件1 條件2:必須滿足第一個條件,應該滿足第二個條件
   例如:+filename:apache content:apache
 3)條件1 條件2:兩個條件滿足其一即可。
   例如:filename:apache content:apache
 4)-條件1 條件2:必須不滿足條件1,要滿足條件2
   例如:-filename:apache content:apache
4、組合條件查詢
  條件1 AND 條件2 / 條件1 OR 條件2 / 條件1 NOT 條件2
5、模糊搜索* 相似搜索~
6、表達式分組
表示必須爲男性,且括號中條件必須滿足一個
例: +(FacebookID.locality:BeiJing FacebookID.ReligiousViews:Methodist) +FacebookID.Gender:男

Occur.MUST 查詢條件必須滿足,相當於and +(加號)
Occur.SHOULD 查詢條件可選,相當於or 空(不用符號)
Occur.MUST_NOT 查詢條件不能滿足,相當於not非 -(減號)

2、實現高級檢索的核心:LUCENE QUERY語句拼接

// 必須爲男性,括號內屬性任意一個滿足或者不滿足都可以
CALL apoc.index.search("nodesProperties", "(FacebookID.CurrentCity:香港 FacebookID.PoliticalViews:共產黨) +FacebookID.Gender:男 ",20) YIELD node RETURN node
// 必須不是男性,括號內屬性任意有一個滿足即可
CALL apoc.index.search("nodesProperties", "+(FacebookID.CurrentCity:香港 FacebookID.PoliticalViews:共產黨) -FacebookID.Gender:男 ",20) YIELD node RETURN node
// 可以是男性,括號內屬性沒有一個滿足
CALL apoc.index.search("nodesProperties", "-(FacebookID.CurrentCity:香港 FacebookID.PoliticalViews:共產黨) FacebookID.Gender:男 ",20) YIELD node RETURN node

四、總結

1、多標籤或者不指定標籤檢索,可以實現自定義過程將圖庫的屬性字段直接建立索引而不指定標籤,這樣簡化跨類型檢索的查詢。
2、爲了支持中文分詞全文索引,可以單獨編寫擴展插件以支持中文分詞索引。這裏是我實現的基於中文分詞的全文索引過程(不包含索引自動更新)。NEO4J插件開發

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章