У меня есть график с двумя типами узлов: User and Activity. Пользователи могут дружить друг с другом. Я хочу получить новость от пользователя. Ниже мой запрос:Внедрение новостей в Neo4j
MATCH (me:User) WHERE me.id = '#{opts[:user_id]}'
MATCH (me)-[:FRIEND*0..1]->(user)-[:CREATE_ACTIVITY]->(activity)
RETURN activity.id AS id,
activity.created_at AS created_at,
activity.activity_type AS activity_type,
{
id: user.id,
name: user.name,
avatar_name: user.avatar_name
} AS user
ORDER BY activity.created_at
LIMIT 10
Однако этот запрос не является эффективным, так как кажется, не применять индексы и будет проверять все данные. Кроме того, после добавления индекса в Activity: created_at ничего не изменилось.
Может ли кто-нибудь предоставить эффективный метод извлечения новостей?
Update:
Я использую Ruby, драгоценный камень.
У меня есть индекс в поле идентификатора пользователя и активности, а также на created_at Activity. Я ожидал, что ORDER BY будет использовать индекс на created_at, но это не так.
Каковы ваши показатели? –
Я также заметил, что вы используете интерполяцию с помощью '# {}'. Вы используете рубин? Если да, используете ли вы камень neo4j или что-то еще? Ядро neo4j/neo4j-core сделает запись cypher nicer –
Индексы не используются для заказа, вы можете поделиться профилем своего запроса (из консоли neo4j-shell или localhost: 7474/webadmin ->) - префикс вашего запроса с ключевым словом 'profile'. –