1

Я пытаюсь получить список лиц в datastax графе, которые имеют один и тот же адрес с другими лицами, а также количество лиц между 3 и 5. Это запрос:Использование индекса в ДГП графе

g.V().hasLabel('person').match(__.as('p').out('has_address').as('a').dedup().count().as('nr'),__.as('p').out('has_address').as('a')).select('nr').is(inside(3,5)).select('p','a','nr').range(0,20) 

на первом запуске я заметил, это сообщение об ошибке:

не удалось найти индекс для ответа на пункт запроса и graph.allow_scan будет отключен: ((метка = человек))

Я включил graph.allow_scan = истина, и теперь он работает

Я интересно, как я могу создать индекс, чтобы быть в состоянии выполнить этот запрос без включения allow_scan = верно?

Благодаря

ответ

0

Я не уверен, что индексация является решение вашей проблемы. Наилучшим способом сделать это было бы восстановление адресов в виде узлов и поиск узлов с индексом между 3 и 5.

Вы можете использовать индекс в текстовых полях ваших адресных узлов.

1

Вы можете создать индекс, добавив его в схему, используя команду:

schema.vertexLabel('person').index('address').materialized().by('has_address').add() 

Полная документация по добавлению индексов доступна здесь: https://docs.datastax.com/en/latest-dse/datastax_enterprise/graph/using/createIndexes.html

Вы не должны позволить graph.allow_scan = true, так как под обложками он включает ALLOW FILTERING в запросах CQL. Это вызовет много кластерных сканирований и неизбежно приведет к тайм-ауту с любым реальным объемом данных в системе. Вы никогда не должны включать это в какой-либо производственной среде.

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