Как использовать анализатор в Hibernate Search?

Когда я использую Infinispan с Hibernate, мне нужно использовать Analyzer для поиска результатов, которые включают ключевое слово.

Но когда я ищу ключевое слово SNO_NO_D6-11100 с запросом типа:

QueryBuilder queryBuilder = CSECore.searchManager
 .buildQueryBuilderForClass(Hierarchy.class).get();
Query query = queryBuilder
 .keyword().onField("path").matching("SNO_NO_D6-11100").createQuery();

Он SNO_NO_D6-11100 на SNO_NO_D6 и 11100 затем находит их соответственно и объединяет 2 результата вместе. Некоторые результаты будут неверными.

Если я проигнорирую анализатор, он просто найдет точное совпадение, которое также неверно. Есть ли решение, которое Analyzer может игнорировать?

1 ответ

Попробуйте выполнить запрос фразы (см. Раздел 5.1.2.4 в запросе hibernate dsl):

Query query = queryBuilder.phrase().onField("path").sentence("SNO_NO_D6-11100").createQuery();

Эти два условия будут по-прежнему разделены, но поскольку это фразовый запрос, он будет искать два отдельных термина, происходящих последовательно. Поэтому он не сможет отличить "SNO_NO_D6-11100" и "SNO_NO_D6 11100", но я предполагаю, что это, вероятно, приемлемо.

licensed under cc by-sa 3.0 with attribution.