簡體   English   中英

編寫動態密碼查詢-Neo4j

[英]Writing a Dynamic Cypher Query - Neo4j

我正在使用數據庫neo4j進行Web項目。 我希望用戶選擇標簽(數據庫中的單獨節點)並根據所選標簽返回內容(還包括數據庫節點)。

我想根據用戶已經選擇的標簽返回與用戶相關的標簽。

我正在考慮的查詢如下所示:

        MATCH (tags:tag)-[:LINKED_WITH]-(content:content)-[:LINKED_WITH]-(previousTags:tag)
        WHERE 
                //new tags must be connected to content that already selected tags are connected to
                //for as many tags as the user has already selected
            (previousTags.UID = {ID1} OR previousTags.UID = {ID2} OR previousTags.UID = {ID3}) 
                //don't include tags that have already been selected in batch of new tags
                //for as many tags as the user has already selected
            AND NOT (tags.UID = {ID1} OR tags.UID = {ID2} OR tags.UID = {ID3}) 
        RETURN tags.whatever
        LIMIT 15
        ODER BY tags.number_of_connections

因為查詢取決於用戶已經選擇的標簽數,所以我必須使用字符串構建來動態編寫查詢。

我對此有三個問題:

有沒有辦法在沒有字符串構建的情況下完成此任務?

cypher / neo4j是否打算像這樣處理查詢? (特別是如果用戶已經選擇了10-15個標簽?)

有沒有更好的方法可以做到這一點?

任何見解將不勝感激。

請記住為tag.UID添加一個索引。

create constraint on (t:tag) assert t.UID is unique

您可以嘗試previous.UID IN {selected_tags}使用previous.UID IN {selected_tags}並傳遞一個字符串數組/集合,但是afaik尚不支持索引查找。 :(

因此,現在您必須堅持字符串構建。

有針對Java的cypher -dsl ,而neo4j.rb也支持針對ruby的cypher -dsl。 這些可能對您有用,不確定它們是否支持查詢所需要的全部內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM