Поиск подстроки или регулярных выражений в Xodus - PullRequest
0 голосов
/ 28 апреля 2020

Я заметил, что браузер сущностей Xodus позволяет искать значения свойств, которые начинаются с подстроки. Например:

firstName ~ Jo

Мне интересно, рассматривался ли поиск по подстроке или регулярному выражению. Я предполагаю, что это не там, потому что это потребовало бы итерации по каждой сущности. Но даже если он будет медленным, это будет удобной функцией в браузере сущностей, возможно, с индикатором выполнения. Знает ли кто-нибудь, рассматривался ли этот вопрос или будет ли развлечен PR, добавляющий его?

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Чтобы найти «cat» в строке «dogcatcow»

Единственное возможное решение, о котором я сейчас могу подумать, - это завершить транзакцию и выполнить:

EntityIterable entities = txn.find(entityType);

От Вот только стандартная Java итерация и итерация по свойствам, содержащим ключевое слово "cat"

Другая идея заключается в обработке каждого свойства, которое вы помещаете в хранилище Xodus. Вы можете создать типичную службу значения ключа, которая будет обрабатывать (например, обработку текста для извлечения слов с помощью Apache Tika) свойства текста до или после сохранения в хранилище.

Итак, из вашего примера «dogcatcow» вы можете иметь 1 ключ, который связывает слова «собака», «кошка» и «корова» с сущностью [или наоборот] (так что, возможно, после сохранения лучше время для создания этих проиндексированных ключей).

В качестве примечания: links - это то, что отличает Xodus от других баз данных, по моему опыту, это очень мощный и полезный во многих случаях.

Отсюда просто findWithLinks при поиске ключей.

Вы можете обратиться к этому коду для примера хранилища KV: https://github.com/divroll/backend/blob/master/src/main/java/com/divroll/backend/service/jee/JeeKeyValueService.java

1 голос
/ 28 апреля 2020

Поиск по регулярному выражению недоступен, но поиск по подстроке есть. Есть метод StoreTransaction.findStartingWith(..). Поиск по подстроке является разновидностью поиска по диапазону свойств для значений свойств строки. Он упоминается в разделе Поиск по диапазону значений свойств вики.

Вот тест , который описывает использование findStartingWith(..).

Что касается производительности, поиск подстроки не повторяется по объектам. Он использует те же индексы свойств, что поиск по значению свойства и поиск по диапазону свойств do.

...