Forums

Home » Liferay Portal » Pусский

Combination View Flat View Tree View
Threads [ Previous | Next ]
toggle
Pavel Shuvaev
использование FuzzyQuery для нечеткого поиска
September 24, 2012 4:03 AM
Answer

Pavel Shuvaev

Rank: New Member

Posts: 13

Join Date: June 7, 2012

Recent Posts

Привет всем.
Я пытаюсь использовать 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 для нечеткого поиска
February 1, 2013 4:05 AM
Answer

Alexey Kakunin

Rank: Expert

Posts: 370

Join Date: July 7, 2008

Recent Posts

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

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

==
Alexey Kakunin
EmDev Limited
Pavel Shuvaev
RE: использование FuzzyQuery для нечеткого поиска
September 24, 2012 11:59 PM
Answer

Pavel Shuvaev

Rank: New Member

Posts: 13

Join Date: June 7, 2012

Recent Posts

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 для нечеткого поиска
September 25, 2012 6:47 AM
Answer

Pavel Shuvaev

Rank: New Member

Posts: 13

Join Date: June 7, 2012

Recent Posts

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