2015-02-26 2 views
3

Мой высчитывать запросИспользуя выражение для предела в Neo4j шифровальщика запроса

start item= node:jobSearch ("title:Job*") WITH collect(item) as items limit 10 RETURN items as job union start item2= node:jobSearch ("title:Job*") WITH collect(item2) as item2s , count(item2) as paths match (job1:Job)-[relation]-(relationNode) where 
(relationNode.name IN ['java','Dance','Programming'] OR relation.duration IN 
['java','Dance','Programming']) AND NOT (job1 IN item2s) AND paths < 10 RETURN job1 as job limit 8 

где я использовал лимит 8 в приведенном выше запросе, я хочу использовать 10 - пути. Как я могу это использовать?

ответ

4

Таким образом, вы должны иметь возможность сделать это с помощью выражения в предложении limit или, возможно, вычислив правильное целое в последнем заявлении WITH (например, WITH (10-paths) as resultCount (...) limit resultCount), но я проверил это, и он не будет Работа.

Просто для ударов я заглянул в исходный код neo4j, чтобы узнать, не пропал ли я что-то. In this source file вы можете увидеть некоторые правила для предложений и синтаксический анализ языка cypher.

Плохая новость заключается в том, что выражение LIMIT ожидает либо целых чисел без знака, либо параметра. Таким образом, в основном вы не можете делать то, что вы просите, если вы не вычислите (10-paths) в отдельном запросе, а затем поместите в этот запрос параметр {resultCount}, а затем дайте ему это предварительно вычисленное значение. Это, вероятно, будет большой работой для не очень большой ценности.

На верху, если ваши результаты не являются на самом деле чудовищно огромный, это, вероятно, проще всего просто LIMIT 10 и включают в себя целое число paths в результирующий набор, так что код, который потребляет эти результаты знает игнорировать больше результатов, чем это.

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