Я использую neo4j 3.5, и у меня около 9 миллионов пользовательских узлов.Я пытался реализовать следующий запрос, но он занимал слишком много времени:
MATCH (users: User
) WHERE (users.username СОДЕРЖИТ "joe" ИЛИ users.first_name CONTAINS "joe"ИЛИ users.last_name СОДЕРЖИТ" joe ") ВОЗВРАЩАЙТЕ пользователей LIMIT 30
Я надеялся воспользоваться новой функцией полнотекстовой индексации neo4j 3.5, создав следующий индекс:
CALL db.index.fulltext.createNodeIndex('users', ['User'], ['username', 'first_name', 'last_name'])
, а затем запрашивать базу данных следующим образом:
CALL db.index.fulltext.queryNodes('users', joe)
YIELD node
RETURN node.user_id
Я думал, что это будет работать так же, как содержит и возвращает пользователей, чьи username, first_name или last_name содержат joe (например: myjoe12, joe12, 12joe, 44joeseph,и т. д.), но, похоже, возвращаются пользователи, чьи поля joe
точно или содержат joe
, разделенные пробелами (например: Joe B, Joe y1), я попытался использовать joe*
в запросе, но он возвращает только всеначиная с joe
, я хочу вернуть все, что содержит joe
или любой другой поисковый запрос.Как лучше всего это сделать?