一、需求
基於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:XX黨) +FacebookID.Gender:男 ",20) YIELD node RETURN node
// 必須不是男性,括號內屬性任意有一個滿足即可
CALL apoc.index.search("nodesProperties", "+(FacebookID.CurrentCity:香港 FacebookID.PoliticalViews:XX黨) -FacebookID.Gender:男 ",20) YIELD node RETURN node
// 可以是男性,括號內屬性沒有一個滿足
CALL apoc.index.search("nodesProperties", "-(FacebookID.CurrentCity:香港 FacebookID.PoliticalViews:XX黨) FacebookID.Gender:男 ",20) YIELD node RETURN node
四、總結
原文地址:https://blog.csdn.net/superman_xxx/article/details/893765411、多標簽或者不指定標簽檢索,可以實現自定義過程將圖庫的屬性字段直接建立索引而不指定標簽,這樣簡化跨類型檢索的查詢。
2、為了支持中文分詞全文索引,可以單獨編寫擴展插件以支持中文分詞索引。這里是我實現的基於中文分詞的全文索引過程(不包含索引自動更新)。NEO4J插件開發