Попытка отсортировать результаты поиска в спящем режиме на основе ближайшего соответствия java

У меня есть фрагмент, который получает результаты поиска из спящего режима с использованием apache lucene. Когда я ввожу параметр поиска, например, «колледж», результаты слов, начинающихся с колледжа, появляются под номером ниже результатов поиска. Учитывая результат, я решил отсортировать набор результатов, и ниже приведен мой подход, но он не работает должным образом.

org.apache.lucene.search.Query luceneQuery = qb.keyword().fuzzy().withThreshold(.8f)
                .withPrefixLength(1).onFields("fieldName").boostedTo(3)
                .matching(searchTerm).createQuery();

//        org.hibernate.search.FullTextQuery query = s.createFullTextQuery( luceneQuery, MyEntity.class );
//        org.apache.lucene.search.Sort sort = new Sort(
//                SortField.FIELD_SCORE,
//                new SortField("id", SortField.STRING, true));
//        luceneQuery.setSort(sort);
//        List results = query.list();

Из приведенного выше фрагмента я должен закомментировать алгоритм сортировки, который я реализую, из-за строк с ошибками.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
328
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Hibernate Search сортирует по релевантности (оценке) по умолчанию, поэтому вам не нужно добавлять пользовательскую сортировку.

Если некоторые результаты недостаточно высоки в списке результатов, это означает, что их оценка недостаточно высока. Чтобы контролировать их оценку, самое простое решение, вероятно, состоит в том, чтобы добавить больше запросов. Как правило, чем большему количеству запросов соответствует конкретный документ, тем выше его оценка.

В этом случае вы можете попробовать что-то вроде этого:

org.apache.lucene.search.Query fuzzyQuery = qb.keyword().fuzzy().withThreshold(.8f)
                .withPrefixLength(1).onFields("fieldName").boostedTo(3)
                .matching(searchTerm).createQuery();
org.apache.lucene.search.Query exactQuery = qb.keyword().onFields("fieldName").boostedTo(10)
                .matching(searchTerm).createQuery();
org.apache.lucene.search.Query luceneQuery = qb.bool()
                .should(fuzzyQuery)
                .should(exactQuery)
                .createQuery();

Тогда документы будут совпадать, если они точно или приблизительно содержат слово «колледж», но если они точно содержат слово «колледж», они будут соответствовать обоим запросам, иметь более высокий балл и отображаться выше в списке результатов.

Если ваш вопрос действительно был о документах, которые сначала содержат термин «колледж», т. е. дать более высокий балл документам, которые содержат искомый термин в начале, то вы, вероятно, тоже можете это сделать, но это более необычный вариант использования. Просто добавьте еще одно предложение .should() с SpanQuery. Вы можете найти больше информации в этом ответе.

если я сначала проиндексирую только один раз, нужно ли мне индексировать все новые записи

Blaze 08.01.2021 18:48

Это похоже на несвязанный вопрос... но нет, вам не нужно переиндексировать после вставки/обновления. Hibernate Search имеет функцию под названием автоматическое индексирование, которая позаботится об этом.

yrodiere 11.01.2021 08:23

Другие вопросы по теме