2013-12-18 2 views
0

За последнюю Titan 0.4.1 docs, этот код должен работать на заказ вершин в наборе результатов:Заказ Titan от ES проиндексированного свойства вершины?

graph.query().has("name",CONTAINS,"john").orderBy("age",Order.DESC).limit(10).vertices() 

Я хотел бы выполнить этот тип запроса через потенциально большой набор вершин, и, таким образом, будет как бы проиндексировать его. Документы предлагают:

Большинство внешних индексирующих бэкэнд поддерживают заказы изначально и эффективно. Однако ключ свойства, используемый в методе orderBy, должен быть сконфигурирован для индексации в этом индексирующем сервере для собственного результата поддержка заказа. Это важно в тех случаях, когда ключ orderBy равен , отличный от ключей запроса. Если ключ свойства не проиндексирован, , то сортировка требует загрузки всех результатов в память.

В частности, для бэкэнда Elasticearch, как мы можем создать индекс, который будет поддерживать этот метод orderBy?

Есть ли простой 3-й параметр для перехода к методу KeyMakerindexed, возможно расширение для приведенного ниже примера из docs?

graph.makeKey("age").dataType(Integer.class).indexed("search", Vertex.class).make(); 

ответ

2

Необходимо просто проиндексировать недвижимость в ES (как и любое другое свойство).

индексируются в Titan (неправильно, OrderBy не будет оптимизирован):

graph.makeKey("age").dataType(Integer.class).indexed(Vertex.class).make(); 

индексируются в ES (правильный нативного результат упорядочения в ES):

graph.makeKey("age").dataType(Integer.class).indexed("search", Vertex.class).make(); 

Cheeers, Daniel

+0

Спасибо, Дэниэл, за ваш быстрый ответ. Таким образом, я попытался выполнить следующий запрос после создания индекса ES на 'age' (используя второй пример выше):' g.query(). OrderBy ("age", Order.DESC) .vertices() '. Это приводит к предупреждению: '... Запрос требует итерации по всем вершинам ...'. Должен ли я использовать другой синтаксис запроса? Или есть еще один шаг, необходимый для использования титаном ES для сортировки? – bcm360

+0

О, вы действительно хотите запросить ВСЕ вершины? В зависимости от того, насколько велика ваша диаграмма, это будет очень дорогостоящая операция. Первый запрос ('graph.query(). Имеет (« name », CONTAINS,« john »). OrderBy (« age », Order.DESC) .limit (10) .vertices()') должен отлично работать с данное определение типа (но условие фильтра важно, иначе вам не понадобится ES для сортировки вашего результата). –

+0

Чтобы добавить: убедитесь, что как «возраст», так и «имя» индексируются в ES и что у вас есть какое-то ограничительное условие - иначе вы переходите весь граф, поскольку заказы сортировки не предварительно вычисляются. –

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