Как добавить подстановочный запрос в Hibernate Search 3.1.1GA

как добавить запрос с подстановочными знаками при использовании поиска в спящем режиме. Я использую банку Hibernate Search 3.1.1GA и не могу обновить свою банку до более высокой версии. В верхней версии спящего режима мы можем использовать метод подстановочных знаков с помощью Query Builder.

Я застрял, пожалуйста, помогите мне.


person Sumant    schedule 26.11.2014    source источник


Ответы (1)


Я предполагаю, что вы имеете в виду DSL запроса Hibernate Search. Что-то вроде этого:

Query luceneQuery = queryBuilder
    .keyword()
      .wildcard()
    .onField("foo")
    .matching("bar*")
    .createQuery();

Этот DSL действительно не является частью Search 3.1.1 и был добавлен позже. В этой версии вам нужно создавать свои запросы, используя собственные запросы Lucene. На самом деле все, что делает Search DSL, заключается в построении для вас этих нативных запросов. В вашем случае вы хотите посмотреть на org.apache.lucene.search.WildcardQuery или вы можете использовать org.apache.lucene.queryParser.QueryParser, чтобы использовать синтаксис запроса Lucene, который также допускает подстановочные знаки.

person Hardy    schedule 26.11.2014
comment
Спасибо за помощь. QueryBuilder недоступен для моей версии. Пожалуйста, поделитесь дополнительным кодом. - person Sumant; 27.11.2014
comment
Вот что я говорю, вам не нужен QueryBuilder. Вы создаете нативные запросы Lucene. Проверьте документы Hibernate Search, а также документы Lucene. Есть куча примеров. - person Hardy; 27.11.2014
comment
Харди: Я сделал, как вы советуете, но получил исключение. Вызвано: java.lang.NoSuchMethodError: org.hibernate.search.SearchFactory.buildQueryBuilder()Lorg/hibernate/search/query/dsl/QueryContextBuilder; в org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310) в org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) - person Sumant; 27.11.2014
comment
Критерии критериев = session.createCriteria(NSAliasImpl.class).add(Restrictions.eq(itemId, itemId)); FullTextSession fullTextSession = Search.getFullTextSession(session); Транзакция tx = fullTextSession.beginTransaction(); QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(NSAliasImpl.class).get(); - person Sumant; 27.11.2014
comment
org.apache.lucene.search.Query query = queryBuilder.keyword().wildcard().onField(trackerId).ignoreAnalyzer().matching(+ searchParam +).createQuery(); - person Sumant; 27.11.2014
comment
Возможно ли это с массивом строк в onFields();? См. мой вопрос @Hardy: stackoverflow.com/questions/28528012/ - person alexander; 16.02.2015