powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate search wildcards
5 сообщений из 5, страница 1 из 1
hibernate search wildcards
    #39989237
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос такой интересный.. а он вообще умеет работать с вайлдкартой когда она не в конце текста а скажем, посередине?
или я что то не то делаю?

у меня есть строчка 200000025 я делаю матч 20000002* -- находит
я делаю матч 2*25 - не находит. причем вижу в эластике оно работать должно а через хибер апи по ходу что то не так
поиск строю так:

searchSession.search(IndexedEntity.class)
.where(factory ->

factory.simpleQueryString().fields(filterBy)
.matching("20000*25")
)
.fetchHits(offset, limit);

и вот тут вот не отвечает так как должно было бы.
или там еще какая то магия есть о которой я не знаю? в самой доке по хиберу вообще говорят типа не юзай вайлдкарт. а что тогда делать когда надо такой поиск?
...
Рейтинг: 0 / 0
hibernate search wildcards
    #39989243
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rtfm как всегда:
https://docs.jboss.org/hibernate/search/6.0/reference/en-US/html_single/#preface
авторList<Book> hits = searchSession.search( Book.class )
.where( f -> f.wildcard().field( "description" )
.matching( "rob*t" ) )
.fetchHits( 20 );
...
Рейтинг: 0 / 0
hibernate search wildcards
    #39989434
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT, из баз данных.

Наилучший план выполнения когда поле равно константе. Будет использован индекс.
Код: java
1.
SELECT * FROM X WHERE Y = "Z"; 



Более худший план - когда wildcard стоит где-то в середине поискового выражения но
мы всё таки можем использовать индекс. Короче fts не будет. Все пространсто индекса
будет разрезано на 3 части условно. Все что предшествовало двойке. То что нужно для выборки.
И все что старше двойки. По сути будет использовано "2%" с дополнительной дофильтрацией уже
по "2%25". Если повезет. Если двойка - высокоселективна - то мы выберем 10% от всего
объема индекса что не так уж плохо.
Код: java
1.
SELECT * FROM X WHERE Y LIKE "2%25"; 



И самый плохой план. Будет всегда Full-table-scan. Потому-что лидирующий мета-символ %
не дает нам возможности выйти на листовые узлы индекса никоим образом. Последний
случай можно пофиксить.... эээ может быть виртуальным полем с реверсом и индексом по нему
или функциональным индексом... но здесь я не готов спорить. Не знаю как оно щас.
Код: java
1.
SELECT * FROM X WHERE Y LIKE "%25";



С практической точки зрения второй вариант тоже может стать плохим. Надо смотреть средствами
Oracle/PG/MySQL или что вы там юзаете как будет работать оптимизатор.

Главный вопрос - во что соберет хибернейт этот wildcard. Это будет определять перформанс.
...
Рейтинг: 0 / 0
hibernate search wildcards
    #39989578
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таки да. это хорошо. когда база скл есть. :)
...
Рейтинг: 0 / 0
hibernate search wildcards
    #39989748
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT, а тебе хибернейт без базы ЗАЧЕМ?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate search wildcards
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]