Я создал следующий триггер Neo4j APOC, который добавляет свойства узла в индекс вручную:
CALL apoc.trigger.add('CREATE_NODES_TRIGGER', "UNWIND {createdNodes} AS n
WITH n WHERE labels(n)[1] IN ['Title','Name','Character']
CALL apoc.index.addNodeByName(labels(n)[1], n, keys(n))
RETURN true", {phase:'before'})
Когда я выполняю следующий запрос:
CALL apoc.index.nodes('Character','name:An*') YIELD node AS c, weight
RETURN c.name, weight LIMIT 10
, он корректно возвращает данные:
c.name weight
"Annette Porter" 1.0
"Anke Bauernfeind" 1.0
"Angel's Henchman" 1.0
"Anna Slovatzka Marshall" 1.0
"Andrew Horvath" 1.0
"Angela Somes" 1.0
"An-Soo 'Alison' Kim" 1.0
"Annette Holman" 1.0
"Anita Wilcox" 1.0
"Anna Cerdick" 1.0
, но в случае запроса в нижнем регистре name:an*
:
CALL apoc.index.nodes('Character','name:an*') YIELD node AS c, weight
RETURN c.name, weight LIMIT 10
результат будет пустым.
Я думаю, что перед добавлением значений свойств следует использовать нижний регистрих в указатель.Я прав?
Если это так, не могли бы вы помочь улучшить триггер, чтобы уменьшить значения свойств в нижнем регистре:
CALL apoc.trigger.add('CREATE_NODES_TRIGGER', "UNWIND {createdNodes} AS n
WITH n WHERE labels(n)[1] IN ['Title','Name','Character']
CALL apoc.index.addNodeByName(labels(n)[1], n, keys(n))
RETURN true", {phase:'before'})
Или, пожалуйста, предложите другой способ решения этой проблемы.Спасибо!
ОБНОВЛЕНО
Я нашел следующее свойство в neo4j.conf:
apoc.autoIndex.enabled=true
и добавил все узлы в индекс:
CALL apoc.index.addAllNodes('movies',{
Title: ["primaryTitle", "originalTitle"],
Name: ["primaryName"],
Character: ["name"]}, {autoUpdate:true})
Итак, сейчас у меня есть вопрос: будет ли apoc.autoIndex.enabled=true
только отслеживать и отражать изменения уже добавленных узлов в индексе (с apoc.index.addAllNodes
), или он также добавит вновь созданные Title
, Name
и Character
узлов для индекса тоже?