基於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: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

   
   
  
  
          

四、總結

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

原文地址:https://blog.csdn.net/superman_xxx/article/details/89376541


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM