Fóruns

Início » Liferay Portal » Pусский

Visualização combinada Visão plana Exibição em árvore
Tópicos [ Anterior | Próximo ]
toggle
Pavel Shuvaev
использование FuzzyQuery для нечеткого поиска
24 de Setembro de 2012 04:03
Resposta

Pavel Shuvaev

Ranking: New Member

Mensagens: 13

Data de entrada: 7 de Junho de 2012

Mensagens recentes

Привет всем.
Я пытаюсь использовать FuzzyQuery Lucen'a для поиска в базе данных. Мой код:

 1    public void postProcessContextQuery(
 2            BooleanQuery contextQuery, SearchContext searchContext)
 3            throws Exception {
 4       
 5        String field = (String)searchContext.getAttribute("field");
 6        if ( field != null) {
 7            FuzzyQuery fuzzyQuery = new FuzzyQuery(new Term("field", field));
 8            contextQuery.add(new LuceneQueryImpl( fuzzyQuery ), BooleanClauseOccur.MUST);
 9        }
10    }


Однако, при деплое выдаются ошибки типа:

The import com.liferay.portal.repository.search cannot be resolved
The import com.liferay.portal.search cannot be resolved
.....
FuzzyQuery cannot be resolved to a type
LuceneQueryImpl cannot be resolved to a type


Очевидно, что из обычного плагин-портлета получить доступ к перечисленным классам я не смогу. Что посоветуете в качестве альтернативы для нечеткого поиска?
Alexey Kakunin
RE: использование FuzzyQuery для нечеткого поиска
1 de Fevereiro de 2013 04:05
Resposta

Alexey Kakunin

Ranking: Expert

Mensagens: 378

Data de entrada: 7 de Julho de 2008

Mensagens recentes

если FuzzyQuery есть в Lucene - то наверное лучше и не изобретать велосипед. насколько я понимаю, что для FuzzyQuery просто нет лайфреевской обертки для использования через из унифицированное search api - которое как раз и доступно для плагинов.
То есть я вижу путь через написания такой обертки и ее добавления в ядро Liferay через ext-plugin
ну и дальше используете в портлете новый ореточный класс.

Надо будет правда сразу проверить как это работает с SOLR

==
Alexey Kakunin
EmDev Limited
Pavel Shuvaev
RE: использование FuzzyQuery для нечеткого поиска
24 de Setembro de 2012 23:59
Resposta

Pavel Shuvaev

Ranking: New Member

Mensagens: 13

Data de entrada: 7 de Junho de 2012

Mensagens recentes

Alexey Kakunin, спасибо за быстрый ответ.
Обертку я в ext-плагине написал - TranslateQuery , но она не видна из обычного портлета. Собственно, классы люцена также не видны:

import org.apache.lucene.index.Term;
^^^^^^^^^^^^^^^^^
The import org.apache.lucene cannot be resolved
import org.apache.lucene.search.FuzzyQuery;
^^^^^^^^^^^^^^^^^
The import org.apache.lucene cannot be resolved
TranslateQuery translateQuery = new TranslateQuery( new FuzzyQuery( new Term("regionName", regionName) ));
^^^^^^^^^^^^^^
TranslateQuery cannot be resolved to a type

Что я не так делаю?
Pavel Shuvaev
RE: использование FuzzyQuery для нечеткого поиска
25 de Setembro de 2012 06:47
Resposta

Pavel Shuvaev

Ranking: New Member

Mensagens: 13

Data de entrada: 7 de Junho de 2012

Mensagens recentes

решил проблему обходным путем: воспользовался query, позволяющей задавать произвольные запросы к люцену - StringQueryFactoryUtil.create( stringQuery). Где stringQuery - строка типа "(+name:запрос~0.66)"