Различный набор результатов между Neo4j Desktop и Enterprise - PullRequest
0 голосов
/ 08 апреля 2019

Я столкнулся со странной проблемой. Первоначально я разработал базу данных и API, используя редакцию Desktop и .Net Core Web API. Я написал поисковый запрос, чтобы найти узлы на основе взаимоотношений:

var results = _client.Cypher
.Match("(n:Person {userId: {userId}})-[]->(ct:ConnectionType)<-[]-(other:Person)")
.Where("ct.key IN {ctQuery}")
.WithParams(new
{
    searchDto.userId,
    ctQuery = searchDto.connectionType
})
.ReturnDistinct((other) => new
{
    Profile = other.As<SearchResultsDto>()
}).Results;

Работая локально, все работало нормально. Однако когда я перенес API и базу данных на сервер Linux, был возвращен пустой результат.

Кажется, проблема связана с типами данных, которые я использую. Свойство «ключ» подключенного узла является целым числом. Объект ctQuery является int []. Когда на рабочем столе все работало нормально. Я открыл браузер и использовал тот же запрос, но все равно не получил результатов при подключении к Enterprise Server. При подключении к базе данных Desktop я получил результаты.

Мне удалось получить результаты, если я изменил int [] на строку [].

Есть ли на предприятии параметр, запрещающий запрашивать int-массивы? Если так, это может быть изменено? У меня есть много запросов, которые будут использовать ключ, и я бы не хотел постоянно преобразовывать строки в целые и обратно.

1 Ответ

1 голос
/ 08 апреля 2019

Нет настроек, как вы описали.

Возможно, вы пропустили преобразование строки в целое число при загрузке данных в Enterprise Server.

Вы можете запустить запрос для преобразования всех значений String для ConnectionType ключей в Integer .

MATCH (n:ConnectionType)
SET n.key= toInt(n.key)
...