Поиск по шаблону Azure Cosmos DB

Можно ли искать свойства Вершины с помощью a содержит в Azure Cosmos Graph DB?

Например, я хотел бы найти всех лиц, у которых 'Jr' есть имя?

g.V().hasLabel('person').has('name',within('Jr')).values('name')

Кажется, что функция within('') только фильтрует значения, которые в точности равны 'Jr'. Я ищу список. Идеально нечувствительный к регистру.

Ответ 1

В настоящее время для CosmosDB не доступны никакие функции сопоставления текста. Тем не менее, я смог реализовать функцию поиска подстановочных знаков, используя UDF (User Defined Function), которая использует функцию Javascript match():

function userDefinedFunction(input, pattern) { return input.match(pattern) !== null; };

Затем вам нужно будет написать свой запрос как SQL и использовать UDF, который вы определили (в приведенном ниже примере предполагается, что вы вызвали функцию "REGEX"

SELECT * FROM c where(udf.REGEX(c.name[0]._value, '.*Jr.*') and c.label='person')

Производительность будет далека от идеальной, поэтому вам нужно решить, приемлемо ли решение или нет, исходя из ваших латентных и стоимостных перспектив.

Ответ 2

Команда Azure внедрила предикаты Tinkerpop для String.

Команда Azure "объявила" об этом пользователю здесь, на их веб-сайте обратной связи.

Я не проверил все из них, но содержит работы для меня (хотя с учетом регистра)

g.V().hasLabel('doc').or(__.has('title', containing('truc')), __.has('tags', containing('truc')))

TextP.startingWith (строка)

Входящая строка начинается с предоставленной строки?

TextP.endingWith (строка)

Заканчивается ли входящая строка предоставленной строкой?

TextP.containing (строка)

Содержит ли входящая строка предоставленную строку?

TextP.notStartingWith (строка)

Входящая строка не начинается с указанной строки?

TextP.notEndingWith (строка)

Разве входящая строка не заканчивается предоставленной строкой?

TextP.notContaining (строка)

Входящая строка не содержит предоставленную строку?