繁体   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