OrientDB Gremlin - получает вершину для класса в гремлине, не попадающего в индексы

Я использую OrientDB 2.1.11 и rexster 2.6, а гремлин является основным языком запросов. Использую через rexpro (и rexster REST). Моя проблема: как получить индексы для попадания из гремлина (я должен использовать гремлин, а не ориентировать sql).

У меня есть почтовый индекс класса вершины, у которого есть 1 свойство zip_code, определенное в схеме и проиндексированное как словарь:

zipcode.zip_code    DICTIONARY  ["zip_code"]    SBTREE 

Но когда я запрашиваю его с помощью gremlin, он работает медленно, когда количество записей составляет около> 25 КБ (не тестировалось с меньшими числами). Чтобы дать правильный контекст, я сначала пытаюсь найти почтовый индекс, если он не существует, я создаю вершину для дальнейшего использования. Поисковый запрос выглядит так:

g.V('@class', 'zipcode').has('zip_code','10018')

Вопрос: попадает ли gV ('@ class' ... в индексы? Разве это не превышает 1000000 объектов V? Есть ли способ написать его лучше, чтобы он был более эффективным для моего класса вершин, то есть zipcode? Мне просто нужно сопоставить свойство вершин в моем классе (почтовый индекс).

Что лучше использовать has('zip_code', '12345') или filter {it.zip_code == '12345'}? Какой из них попадет в созданный индекс?

Что, если мне нужно сопоставить более 1 свойства для сопоставления:

.has('zip_code', '12345').has('state','NY').has('city','NEW YORK') 

будет ли «индексы попаданий» или «фильтр {}»? пожалуйста, порекомендуйте.


person Omair Jafri    schedule 17.02.2016    source источник
comment
Я даже использовал студию, такая же медленность наблюдалась, когда вершина zipcode имеет только 8000 записей, а zip_code индексируется по словарю: g.V ('@ class', 'zipcode'). Has ('zip_code', '10018') Запрос выполняется за 1,936 секунды. Возвращено 1 запись (ы). Лимит: 20   -  person Omair Jafri    schedule 18.02.2016
comment
некоторая дополнительная информация, когда я использую orient sql в студии, кажется, что он попадает в index: select * from zipcode, где zip_code = '10018' Запрос выполняется за 0,047 секунды. Возвращено 1 запись (ы). Лимит: 20 ', пожалуйста, помогите, как я могу попасть в индексы с помощью гремлина   -  person Omair Jafri    schedule 19.02.2016


Ответы (1)


Хорошо, после некоторых попыток я смог понять, что это работает через rexster / gremlin. Я изменил свой запрос на что-то вроде:

new GremlinPipeline(g.getVertices('city_state.city','PALMETTO')).has('state_code','FL')

or
g.getVertices('city_state.city','PALMETTO')._().has('state_code','FL')

Метод g.getVertices принимает нотацию 'class.field' (которая требуется для попадания в индексы), но возвращает итератор, а не канал, поэтому я должен поместить его в GremlinPipeline или альтернативный _ (), чтобы писать дальше. шаги в гремлине.

Надеюсь, это поможет и другим людям. Заставил меня сгореть 2 дня, это сложно, когда вы действительно пытаетесь перейти на новый продукт от neo4j (который справился со своими запросами и поддержкой).

person Omair Jafri    schedule 21.02.2016
comment
Есть какие-нибудь подсказки, как попасть в индекс с помощью чистого API Gremlin? Это похоже на Blueprints API. - person Mon Calamari; 24.04.2016
comment
У вас есть пример, на котором вы застряли? Для меня чертежи используются как синонимы гремлина. Приведенный выше ответ попал во все индексы с помощью orientdb - person Omair Jafri; 26.04.2016
comment
Да, потому что getVertices - это API чертежей. Я использую gremlin-orientdb, и индекс не попадает в нечто вроде: g.V().has(Key[String]("prop"), value) - person Mon Calamari; 26.04.2016
comment
g.V () - причина отсутствия попадания в индексы. Я предлагаю попробовать использовать g.getVerticesOfClass ('className') ._ () или g.getVertices ('class.property') ._ (). На мой взгляд, это просто поведение или orientdb, может быть, один из их разработчиков может вам помочь - person Omair Jafri; 01.05.2016
comment
Я узнал. В запросе отсутствует метка: g.V().hasLabel("label").has(.... Метка внутренне сопоставляется с классом в orientdb. Печальная история заключается в том, что вы не можете использовать метку суперкласса V для попадания в индекс, даже если свойство существует в классе V. - person Mon Calamari; 01.05.2016