2015-06-04 2 views
2

У меня есть один узел в Neo4j, структура которого выглядит следующим образом:Как запросить сбор с использованием cypher в neo4j?

{ 
      "nodeId": 32, 
      "id": "0290cf88-3345-4c30-8e5f-7ce0cb3f0b6b", 
      "type": "User", 
      "name": "Mahendra", 
      "index": 0, 
      "data": "This is sample user", 
      "description": null, 
      "contentBlocks": [], 
      "icon": null, 
      "createdOn": null, 
      "modifiedOn": null, 
      "properties": { 
       "displayName": "Mahendra", 
       "lastName": "Kawde" 
      }, 
      "tags": [ 
       "tag1", 
       "tag2" 
      ], 
      "categories": null 
     } 

Теперь я хочу, чтобы получить все узлы, передавая метки в качестве параметра моего шифровальщика запроса. Я использую ниже запроса:

MATCH (node) WHERE node.tags = ['tag1','tag2'] RETURN node 

Это возвращает мне все узлы с заданными тегами. Но если я использую ниже запрос

MATCH (node) WHERE node.tags = ['tag1'] RETURN node 

он не возвращает мне любой узел.

Также, если я могу изменить порядок, скажем ['tag2', 'tag1'], он не возвращает мне ни одного узла.

Ниже мой метод управления: метод

@RequestMapping(value = "/getByTag",method = RequestMethod.GET, consumes=MediaType.APPLICATION_JSON, produces=MediaType.APPLICATION_JSON)  
    public Result<Node> getByTag(@RequestParam(value="tags") List<String> tags) throws EntityNotFoundException { 
     return nodeService.getByTag(tags); 
    } 

Услуги:

public Result<Node> getByTag(List<String> tags) { 

     HashMap params = new HashMap(); 
     params.put("type",tags); 

     String query = "MATCH (node) WHERE node.tags = "+ tags +" RETURN node"; 

     Result<Node> nodes = neo4jTemplate.query(query, params).to(Node.class); 
     return nodes; 
    } 

Можете ли вы дать мне возможность использовать коллекцию, более точно List<String> в шифровальщика запросе?

Пожалуйста, помогите

ответ

2

Как насчет

MATCH (node) 
WHERE ALL (x IN ['tag1','tag2'] WHERE x in node.tags) 
RETURN node 

См http://neo4j.com/docs/2.2.2/query-predicates.html

+0

Да это работает. Но что, если я добавлю другой тег, скажу так: WHERE ALL (x IN ['tag1', 'tag2', 'tag3'] WHERE x in node.tags) –

+0

Тогда он не возвращает ни одного узла –

+0

ВСЕ будут делать убедитесь, что согласованный узел имеет каждый тег, указанный в списке. Если вы хотите, чтобы некоторые из них совпадали, используйте другой вариант из приведенной выше ссылки, например ANY – Luanne

Смежные вопросы