2016-02-17 5 views
2

Я использую OrientDB 2.1.11, а rexster 2.6 и gremlin - основной язык запросов. Я использую через rexpro (и rextster REST). Моя проблема: как заставить индексы попадать из гремлина (я должен использовать gremlin not orient sql).OrientDB Gremlin - Retrieve Vertex для класса в gremlin, не попадающем в индексы

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

zipcode.zip_code DICTIONARY ["zip_code"] SBTREE 

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

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

Вопрос:? Является ли ГВ («@ класс» ... ударяя индексы не собирается более 1000 тысяч объектов V Есть ли способ, чтобы написать лучше, чтобы быть более эффективными для моей вершины класса, т.е. почтовый индекс? Мне просто нужно, чтобы соответствовать свойство вершин в своем классе (ZipCode).

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

что делать, если Я должен соответствовать более чем 1 свойствам в сравнении:

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

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

+0

Я даже использовал в студии, так же замедленность наблюдается, когда почтовый индекс вершина имеет только 8000 записей и zip_code в словаре индексируются:. ГВ («@ класс», «почтовый индекс») имеет («zip_code», «10018») Запрос выполнен в 1.936 сек. Возвращено 1 запись. Ограничение: 20 –

+0

Дополнительная информация, когда я использую ориентир sql в студии, кажется, попадает в указатель: выберите * from zipcode где zip_code = '10018' Запрос выполнен в 0.047 секунд. Возвращено 1 запись. Ограничение: 20 ' Пожалуйста, помогите, как я могу попасть в индексы с помощью gremlin –

ответ

0

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

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

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

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

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

+0

Любые подсказки, как ударить индекс с помощью чистого API Gremlin? Это похоже на API Blueprints. –

+0

У вас есть пример, который вы застряли? Для меня чертежи используются синонимично с гремлином. Вышеуказанный ответ ударил по всем индексам с помощью orientdb –

+0

Да, это произошло из-за 'getVertices' - это API чертежей. Я использую gremlin-orientdb, и индекс не попадает в нечто вроде: 'g.V(). Has (Key [String] (" prop "), value)' –

Смежные вопросы