Я пытаюсь написать поисковый запрос, где на входе находится какой-либо ключ поиска, а требование - искать среди вершин, где данный ключ ввода соответствует значению двух или более ключи свойств вершины. Для примера при условии, что у меня есть вершины пользователя в моем графике дб со следующими ключами собственности:Поиск запроса Gremlin по ключевому слову поиска по нескольким свойствам вершин
- 1) Пользователь первое имя
- 2) Пользователь фамилия
- 3) электронной почты пользователя
Теперь, учитывая ключ поиска «xyz», мне нужно выполнить поиск по пользовательским вершинам, где любой из указанных выше трех ключей свойств соответствует значению «xyz». Вот как я подошел к проблеме.
g.V.has('ENTITY_TYPE', 'USER').or(_().has('USER_EMAIL' , TEXT.REGEX , '.*xyz.*') , _().has('USER_FNAME' , TEXT.REGEX , '.*xyz.*''USER_EMAIL' , TEXT.REGEX , '.*xyz.*') , _().has('USER_LNAME' , TEXT.REGEX , '.*xyz.*')).dedup();
Я создал необходимые смешанные индексы (три отдельные смешанные индексы) для USER_EMAIL, USER_FNAME и USER_LNAME следующим образом:
key = m.makePropertyKey("USER_EMAIL").dataType(String.class).make();
m.buildIndex("serachbyemail",Vertex.class).addKey(key).buildMixedIndex("search");
key = m.makePropertyKey("USER_FNAME").dataType(String.class).make();
m.buildIndex("searchbyfname",Vertex.class).addKey(key).buildMixedIndex("search");
key = m.makePropertyKey("USER_LNAME").dataType(String.class).make();
m.buildIndex("typemixed",Vertex.class).addKey(key).buildMixedIndex("search");
Это прекрасно работает. Но я хочу знать, является ли это наилучшим подходом к этой проблеме? Или есть лучший способ сделать это? Кроме того, я использую gremlin java api для написания вышеуказанного запроса. Я использую dedup() для удаления повторяющихся вершин.
Пожалуйста, добавьте определение (определения) индекса. –
Обновлено сообщение с определениями индексов – user3244615