2015-09-11 2 views
3

У меня есть база данных Neo4J с большим количеством наборов данных (~ 15M), где я хочу выполнить больше, чем поиск по одному из своих свойств. У меня есть соответствующее свойство, индексированное. Свойство - это значение поплавка.Neo4J поиск больше, чем по индексу

Когда я делаю точный матч, как MATCH (i:Label) WHERE i.property = $value RETURN count(i) Я получаю результат за очень короткое время. Но когда я делаю тот же поиск с greater than, то есть MATCH (i:Label) WHERE i.property > $value RETURN count(i), он просто берет навсегда. Каков правильный способ сделать это в Cypher?

Edit: План выполнения:

+--------------------------------------------+ 
| No data returned, and nothing was changed. | 
+--------------------------------------------+ 
74 ms 

Compiler CYPHER 2.2 

Planner COST 

EagerAggregation 
    | 
    +Filter 
    | 
    +NodeByLabelScan 

+------------------+---------------+-------------+------------------------------+  
|   Operator | EstimatedRows | Identifiers |      Other | 
+------------------+---------------+-------------+------------------------------+ 
| EagerAggregation |   2064 | count(r) |        | 
|   Filter |  4260557 |   r | r.date > Subtract(Divide( | 
|     |    |    | TimestampFunction(),{  | 
|     |    |    | AUTOINT0}),Literal(86400)) | 
| NodeByLabelScan |  14201858 |   r |      :Request | 
+------------------+---------------+-------------+------------------------------+ 

Total database accesses: ? 
+0

Пожалуйста, покажите нам план выполнения запроса - HTTP://neo4j.com/docs/stable/how-do-i-profile-a-query.html – MicTech

ответ

1

Другим подходом является создание дополнительных узлов/агрегатов для этого свойства и поиск по этим узлам.

Пример

Пусть говорят, что свойство имеет значение от 0 - 100.

Создать следующие узлы
* 0to30
* 31to60
* 61to100

Создать отношения с вами узлов к этим «совокупным» узлам.

чем поиск через эти узлы

MATCH (л: Label) - [I:] -> (а: 0to30) ВОЗВРАТ л

+0

Спасибо, это был очень большой вклад. Иногда я слишком слеп, чтобы видеть очевидное –

1

К сожалению Neo4j не использует это индексы для неравенств в 2.2.x. В предстоящем 2.3.x это должно поддерживаться.

+0

Я ожидал чего-то подобного :(Есть ли информация о том, когда 2.3.x должен быть выпущен? –

+0

И это функция, уже реализованная в выпуске Milestone? –

+0

Планируется, что 2.3.0-M03, как мы надеемся, выйдет в ближайшем будущем. Не стесняйтесь тестировать его, когда он выходит, но помните, что этапы релиза не гарантируют путь обновления для ваш когда появляется следующий кандидат на веху/релиз. –

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