Как я могу искать ключевое слово в Hibernate Search с определенным артиклем?

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

Например, когда я использую этот запрос:

Query query = queryBuilder.keyword().onField("normVal").matching("asthme").createQuery();

Он просто соответствует слову астма в поле «normVal», но я хочу, чтобы запрос также мог найти слово «астма» или «астма».

Кто-нибудь знает, как это сделать в Hibernate Search?????????


person Stephan    schedule 09.04.2014    source источник


Ответы (1)


Вы можете использовать метод matching с подстановочными знаками в строке: ? представляет один символ, а * представляет любую последовательность символов.

Таким образом, ваш код, например, может быть:

 Query query = queryBuilder.keyword().onField("normVal").matching("*asthme*").createQuery();

Более подробную информацию можно найти здесь

Редактировать после комментария ОП

Если у вас есть фиксированные значения для поиска, например слова с артиклями, вы также можете попробовать что-то вроде этого вместо подстановочных знаков:

Query query = queryBuilder.bool()
.should(queryBuilder.keyword().onField("normVal").matching("l'asthme").createQuery())
.should(queryBuilder.keyword().onField("normVal").matching("d'asthme").createQuery())
.should(queryBuilder.keyword().onField("normVal").matching("asthme").createQuery())
.createQuery();

Обратите внимание, что метод should будет работать как оператор запроса OR.

person Cirou    schedule 09.04.2014
comment
Я пробовал этот метод, но поиск с подстановочным знаком увеличивает время поиска, и я видел, что рекомендуется, чтобы запрос не начинался с ? или же *. Есть ли другой способ решить эту проблему? - person Stephan; 09.04.2014
comment
Если вы уже пробовали это, то в чем реальный вопрос? Это не то, о чем вы просили, в следующий раз будьте более конкретны, пожалуйста. - person Cirou; 09.04.2014
comment
Мне жаль, что я просто хочу найти решение, которое может решить эту проблему и не снизить производительность системы. - person Stephan; 09.04.2014
comment
Но в реальном поиске l' или d' не фиксированы, возможно, будут какие-то другие символы. Мне нужен динамичный способ. Более того, если я использую астму, значит ли это, что она найдет астму и астму? - person Stephan; 09.04.2014
comment
Да, он должен работать, но он будет иметь ту же производительность, что и начальный символ «*», ведь обычно рекомендуется, чтобы запрос не начинался ни с одного из них? или *, как вы указали в своем первом комментарии - person Cirou; 09.04.2014