从neo4j cypher获取特定的字符串

时间:2015-06-12 19:08:24

标签: node.js api rest neo4j cypher

我有这个功能从节点图像的描述中获取hastag 当我手动输入keyWord它的工作

exports.hashtag = function (req, res) {
    var query = [
            'start n = node(*) where n.description =~ \'(?i).*({hashtagss}).*\' return n ' 
    ].join('\n')


var params = {
    hashtagss: req.params.hashtagss
};

Image.query(query, params, function (err, images) {
    if (err) return res.status(500).json(err);
    else return res.status(200).json({hashtags:images});
});

};

但是当我发送参数时,我收到此错误消息

    {
"message": "The statement has been closed.",
"name": "Neoprene"
}

任何解决方案

2 个答案:

答案 0 :(得分:2)

您的查询一点都不好

  1. 不要在所有节点上使用扫描,请使用标签!
  2. 字符串
  3. 未解析参数
  4. 插入数据时,将主题标签拉出为连接到内容节点的单独节点
  5. 你的例子

    MATCH (n:Content)
    WHERE n.description =~ '(?i).*('+{hashtagss}+').*' 
    return n
    

    更好的:

    MATCH (n:Content)<-[:TAGGED]-(t:Tag)
    WHERE t.name IN {hashtags} 
    return n, collect(t.name) as tags
    

答案 1 :(得分:0)

我找到了这个解决方案 这对我有用 这正是我需要的

exports.hashtag = function (req, res) {

    var hashtag = req.params.hashtag;

    var query = [
            'MATCH (imageTag:Image) WHERE imageTag.description =~ \'(?i).*'+hashtag+'.*\'  return imageTag'

    ].join('\n')



    Image.query(query, function (err, images) {
        if (err) return res.status(500).json(err);
        else return res.status(200).json({hashtags:images});
    });
};