Fórum

использование FuzzyQuery для нечеткого поиска

Pavel Shuvaev, modificado 11 Anos atrás.

использование FuzzyQuery для нечеткого поиска

New Member Postagens: 13 Data de Entrada: 07/06/12 Postagens Recentes
Привет всем.
Я пытаюсь использовать FuzzyQuery Lucen'a для поиска в базе данных. Мой код:

    public void postProcessContextQuery(
            BooleanQuery contextQuery, SearchContext searchContext)
            throws Exception {
        
        String field = (String)searchContext.getAttribute("field");
        if ( field != null) {
            FuzzyQuery fuzzyQuery = new FuzzyQuery(new Term("field", field));
            contextQuery.add(new LuceneQueryImpl( fuzzyQuery ), BooleanClauseOccur.MUST);
        }
    }


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

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


Очевидно, что из обычного плагин-портлета получить доступ к перечисленным классам я не смогу. Что посоветуете в качестве альтернативы для нечеткого поиска?
thumbnail
Alexey Kakunin, modificado 11 Anos atrás.

RE: использование FuzzyQuery для нечеткого поиска

Liferay Master Postagens: 621 Data de Entrada: 07/07/08 Postagens Recentes
если FuzzyQuery есть в Lucene - то наверное лучше и не изобретать велосипед. насколько я понимаю, что для FuzzyQuery просто нет лайфреевской обертки для использования через из унифицированное search api - которое как раз и доступно для плагинов.
То есть я вижу путь через написания такой обертки и ее добавления в ядро Liferay через ext-plugin
ну и дальше используете в портлете новый ореточный класс.

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

==
Alexey Kakunin
EmDev Limited
Pavel Shuvaev, modificado 11 Anos atrás.

RE: использование FuzzyQuery для нечеткого поиска

New Member Postagens: 13 Data de Entrada: 07/06/12 Postagens Recentes
Alexey Kakunin, спасибо за быстрый ответ.
Обертку я в ext-плагине написал - TranslateQuery , но она не видна из обычного портлета. Собственно, классы люцена также не видны:

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

Что я не так делаю?
Pavel Shuvaev, modificado 11 Anos atrás.

RE: использование FuzzyQuery для нечеткого поиска

New Member Postagens: 13 Data de Entrada: 07/06/12 Postagens Recentes
решил проблему обходным путем: воспользовался query, позволяющей задавать произвольные запросы к люцену - StringQueryFactoryUtil.create( stringQuery). Где stringQuery - строка типа "(+name:запрос~0.66)"