2015-04-15 4 views
2

Ответ, возвращаемый интерфейсами REST Neo4j, очень подробен - они возвращают не только данные в каждом запрошенном узле, но также и полную возможность обнаружения для каждого запрашиваемого узла. Если мне просто нужны данные о узлах, результаты примерно в 20 раз больше, чем мне нужно, и я сталкиваюсь с проблемами с исключениями из-за памяти и т. П.Neo4j - Уменьшить количество полей, возвращаемых в ответе REST

Например, запрос узла может вернуть следующее:

{ 
    "labels" : "http://giuncwy02:7475/db/data/node/67/labels", 
    "outgoing_relationships" : "http://giuncwy02:7475/db/data/node/67/relationships/out", 
    "data" : { 
    "id" : "908754897618956", 
    "currentStatus" : "Active", 
    }, 
    "traverse" : "http://giuncwy02:7475/db/data/node/67/traverse/{returnType}", 
    "all_typed_relationships" : "http://giuncwy02:7475/db/data/node/67/relationships/all/{-list|&|types}", 
    "self" : "http://giuncwy02:7475/db/data/node/67", 
    "property" : "http://giuncwy02:7475/db/data/node/67/properties/{key}", 
    "outgoing_typed_relationships" : "http://giuncwy02:7475/db/data/node/67/relationships/out/{-list|&|types}", 
    "properties" : "http://giuncwy02:7475/db/data/node/67/properties", 
    "incoming_relationships" : "http://giuncwy02:7475/db/data/node/67/relationships/in", 
    "extensions" : { }, 
    "create_relationship" : "http://giuncwy02:7475/db/data/node/67/relationships", 
    "paged_traverse" : "http://giuncwy02:7475/db/data/node/67/paged/traverse/{returnType}{?pageSize,leaseTime}", 
    "all_relationships" : "http://giuncwy02:7475/db/data/node/67/relationships/all", 
    "incoming_typed_relationships" : "http://giuncwy02:7475/db/data/node/67/relationships/in/{-list|&|types}", 
    "metadata" : { 
    "id" : 67, 
    "labels" : [ "Substation" ] 
    } 
} 

Есть ли способ, чтобы уменьшить объем информации, возвращаемый в ответ? Все, что я действительно хочу для каждого узла заключается в следующем:

{ 
    "id" : "908754897618956", 
    "currentStatus" : "Active", 
} 

или даже:

[ "908754897618956", "Active" ] 

Это достижимо? Когда я запрашиваю сотни тысяч узлов, это имеет большое значение.

+1

Формат «Отдых» определенно слишком подробный. Существуют некоторые запланированные изменения в протоколе, используемом конечной точкой http tx в будущих версиях. Возможно, вы захотите изменить параметр resultDataContent на «graph» или «row», чтобы иметь менее подробный ответ. http://neo4j.com/docs/stable/rest-api-transactional.html#rest-api-return-results-in-graph-format –

+0

Спасибо Кристоф, есть ли соответствующий вариант без использования транзакционного API? Прямо сейчас я просто нажимаю '/ db/data/label/MyLabel/nodes'. –

+0

Не знаю, что знаю. Кстати, я думаю, что эти конечные точки становятся все менее и менее используемыми в пользу tx api. –

ответ

2

Нет опции конфигурации, чтобы настроить ее для существующей конечной точки db/data/node.

Как нарисованный Кристофом, вы можете использовать транзакционную конечную точку и индивидуальный оператор Cypher для возврата тех свойств, которые хотите видеть.

Другой вариант - написать свой собственный unmanaged extension серверу Neo4j, который возвращает узлы, как вы указали.

Самые низкие висящие фрукты - это, несомненно, первый подход.