Запрос в Гремлине с использованием нескольких индексов

Вопрос:

Я пытаюсь оптимизировать запросы в Gremlin на графике Neo4J.

Вот краткая версия основного запроса, который я использую:

g.idx("myIndex")[[myId:5]].outE("HAS_PRODUCT").filter{it.shop_id:5}.inV

Поэтому я просмотрел индексацию и получил для создания индекса на "HAS_PRODUCT" -typed ключ 'shop_id'.

Используя тот же запрос, я не вижу большой разницы.

Мои вопросы:

  • Мой новый индекс используется, когда я запрашиваю: filter{it.shop_id:5}

  • Если нет, как я могу использовать этот новый индекс в моем запросе?

  • В более общем плане, если idx( метод графа для использования индекса, существует ли для этого метод pipe)?

Благодарю!

Лучший ответ:

Короткий ответ заключается в том, что Gremlin не будет использовать вторичный индекс при использовании Neo4j, но, пожалуйста, подумайте о том, чтобы прочитать более длинный ответ ниже относительно TinkerPop, Gremlin и его философии.

Более длинный ответ -…. Индексы не используются для вашего shop_id. Когда вы вызываете outE вы эффективно повторяете все края, чтобы найти те, у которых есть shop_id == 5. Чтобы использовать индексы в Гремлине, вы должны использовать вершинный запрос. Итак, переписывание кода немного (также с использованием ключевых индексов) будет выглядеть так:

g.V('myIndex',5).outE('HAS_PRODUCT').has('shop_id',5).inV

С BluePrints реализациями, которые поддерживают вершинные ориентированные индексы, использование has автоматически использовать этот индекс. К сожалению, Neo4j пока не является одной из этих баз данных. Реализации Blueprints, которые его реализуют, включают Titan (см. Индексы с ориентировкой по Вершине) и OrientDB (как часть еще неизданного Blueprints 2.4.0… в этом случае они будут иметь частичную реализацию в этом выпуске).

Оцените статью
TechArks.Ru
Добавить комментарий