簡體   English   中英

通過密碼查詢在neo4j數據庫中搜索關鍵字

[英]Search keywords in neo4j database by cypher query

在此處輸入圖片說明 我正在網站上並實現搜索過濾器功能。我正在從neo4j數據庫中獲取搜索結果。 我在應用過濾器時遇到問題。問題是當添加搜索時,例如說班加羅爾,我得到10個結果,然后我添加另一個關鍵字,讓開發人員我從整個數據庫中得到結果,但是我想要的結果應該僅來自先前選擇的結果或關鍵字是班加羅爾

我的查詢是:

        $data = array (
           "query" => "MATCH (x :Job)-[r :POSTED_JOB]-(m) where ( x.city IN {data1} or x.categories or x.sectors IN {data4} or x.role IN {data5} or x.requirement IN {data6} 
            or x.title IN {data7} or x.description IN {data8})
            RETURN m.companyName,x.city",
       "params" => array(
                "data1" => $city,
                "data4" => $sector,
                "data5" => $skills,
                "data6" => $search,
                "data7" => $search,
                "data8" => $search

));

如何編寫此查詢以優化結果。

您的查詢充滿了OR ,這意味着當任何一個(該數組包含兩個data5屬性)時, Job都會匹配。 如果要匹配所有提供的條件,則將OR替換為AND 根據您提供的數據,您可能需要注意NULL值和空列表。

編輯-示例代碼

我認為這是您查詢的一小部分,可能與您所討論的字段匹配。

WHERE x.city IN {data1} OR x.role IN {data5}

它說可以與我在班加羅爾(X)位於班加羅爾(X)的任何節點(x) 為開發人員角色(X)匹配。 如果您希望查詢僅匹配班加羅爾和開發人員中的記錄,則查詢的該部分應為:

WHERE x.city IN {data1} AND x.role IN {data5}

x.categories似乎也有些擱淺(除了其存在之外,您沒有查詢任何東西)。

編輯-發布聊天

要求是執行連續查詢,其中每個查詢都充當先前結果的過濾器。 所有字段均與每個呼叫重新匹配。 為此,您需要具有一個外部節點標識符,該標識符可用於鏈接查詢,然后將標識符集傳遞到每個后續查詢中。 Cypher中的簡化示例:

初始查詢:

MATCH (j:Job)<-[:POSTED_JOB]-(m)
WHERE j.title=~{searchString} OR j.description=~{searchString}
RETURN j.jobId, j.title, j.description, j.city, m.companyName

后續查詢:

MATCH (j:Job)<-[:POSTED_JOB]-(m)
WHERE j.jobId IN {collectionOfJobIds}
AND (j.title=~{searchString} OR j.description=~{searchString})
RETURN j.jobId, j.title, j.description, j.city, m.companyName

編輯-因為它困擾着我

您可能希望重新匹配每個查詢的數據,因此可以使用過濾器:

MATCH (j:Job)<-[:POSTED_JOB]-(m)
WHERE j.title=~({searchStrings}[0]) OR j.description=~({searchStrings}[0])
WITH m, COLLECT(j) as jobs
WITH m, FILTER (j IN jobs WHERE j.title=~({searchStrings}[1]) OR j.description=~({searchStrings}[1]) as filteredJobs
RETURN m, jobs

這要求將searchStrings作為數組傳入,並且您可以根據需要添加任意數量的WITH(只記得增加數組索引)。 重要的是要意識到,對於所有這些查詢,如果您有很多Job,那么在匹配系統中的所有Job時,它們將變得很慢。 如果您可以對初始比賽設置一些限制,那么您的生活會更好!

旁白:雖然您可以將“城市”,“部門”,“技能”等建模為節點而不是屬性,但您的模型並不是真正的圖形。

暫無
暫無

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

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