2017-01-17 3 views
-3

Я работаю над проектом, который использует Node.js, Cypher и Neo4j. Передняя часть проекта иногда нуждается в QUICKLY вытащите случайного пользователя. Я видел этот запрос в Интернете:Как этот запрос cypher выбирает случайный узел?

MATCH (n:User) WHERE rand() < 0.1 RETURN n LIMIT 21 

но я понятия не имею, что это делает. Это кажется довольно быстрым, но я хотел бы это понять. Разбивка, что я знаю:

MATCH | Match some nodes 
(n:User) | Let's call this node n, and it has to be of type User 
WHERE | Specify conditions for node match 
rand() | Return a random number from 0 to 0.9999... 
<  | Less than 
0.1  | ?? 
RETURN | Give back the matched node(s) 
n  | Our node(s) 
LIMIT 21 | Don't return more than 21 nodes 

Что делает rand() и 0.1 делать? Это как-то ограничивает потенциальные узлы для возврата?

Если это помогает, у меня есть около 10 000 узлов

+2

Вы просмотрели документы Cypher и прочитали описание 'rand()' (что почти так же, как и любой генератор случайных чисел на других языках)? –

+1

Почему downvote? Насколько мне известно, 'rand()' возвращает случайное число от 0 до 0.99999 ... но как это возвращает случайного пользователя? – programmer5000

+1

Это просто простая оценка в предложении where. Таким образом, с каждым узлом вы получаете случайное число, которое сравнивается. Сдвиги, вероятно, связаны с тем, что так просто просто запустить этот запрос и увидеть результаты (даже просто вернув случайное число вместе с узлом, чтобы увидеть, что возвращается). –

ответ

1

Как ваш вопрос уже говорится, оговорка WHERE задает условия для MATCH, чтобы добиться успеха. Итак, WHERE rand() < 0.1 означает, что MATCH имеет 10% вероятность успеха.

+1

Благодарим вас за объяснение части «0.1», которую ни один из комментариев не объяснил! – programmer5000

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