Почему 'AND NOT (value.title IN ['item1','item2']' не возвращает правильный результат в anormcypher, но работает в консоли neo4j?
Anormcypher 0.80, Scala 2.11.7
Я пытаюсь исключить список элементов из набора результатов шифрования, используя 'AND NOT (value.title IN ['item1','item2']'.
Запускаемый мной шифровый запрос работает в консоли neo4j, но не исключает item1 и item2, когда я пытаюсь выполнить один и тот же запрос с помощью anormcypher. запрос выглядит следующим образом:
MATCH (c:Item)-[:INCLUDES_TERM]-(t:Term),(b:Box)-[:CONTAINS_TERM]-(t),
(b)-[r:IS_ABOUT_THING]-(thm:Thing)
where c.name = 'aName'
AND NOT (thm.title IN [('item1','item2')])
AND b.date >= 1443657600000 AND b.date <= 1443657700000
return DISTINCT(thm.title) as thing, count(b) as amount
order by amount desc LIMIT 50
В консоли neo4j этот зашифрованный запрос вернет результат с отфильтрованным item1 и item2.
Если я выполню запрос из scala с использованием anormcypher, item1 и item2 не будут отфильтрованы из результата. Это код:
val exclusions:String = "'item1','item2'"
val name = "aName"
val startDate = "1443657600000"
val endDate = "1443657700000"
val cypherQuery = Cypher("""MATCH (c:Item)-[:INCLUDES_TERM]-(t:Term),(b:Box)-[:CONTAINS_TERM]-(t),
(b)-[r:IS_ABOUT_THING]-(thm:Thing)
where c.name = {item}
AND NOT (thm.title IN [{exclusions}])
AND b.date >= {startDate} AND b.date <= {endDate}
return DISTINCT(thm.title) as thing, count(b) as amount
order by amount desc LIMIT 50"""
).on("item" -> name, "startDate" -> startDate, "endDate" -> endDate, "exclusions" -> exclusions)
val resultList = cypherQuery.apply()
Почему этот запрос работает в консоли neo4j, но не работает в scala с использованием anormcypher?
1 ответ
exclusions
Параметр должен быть массивом строк, а не единственной строкой, встроенной в массив. Попробуй это:
val exclusions: Array[String] = Array("item1", "item2")
val name = "aName"
val startDate = "1443657600000"
val endDate = "1443657700000"
val cypherQuery = Cypher("""MATCH (c:Item)-[:INCLUDES_TERM]-(t:Term),(b:Box)-[:CONTAINS_TERM]-(t),
(b)-[r:IS_ABOUT_THING]-(thm:Thing)
where c.name = {item}
AND NOT (thm.title IN {exclusions})
AND b.date >= {startDate} AND b.date <= {endDate}
return DISTINCT(thm.title) as thing, count(b) as amount
order by amount desc LIMIT 50"""
).on("item" -> name, "startDate" -> startDate, "endDate" -> endDate, "exclusions" -> exclusions)
val resultList = cypherQuery.apply()