Ограничение MoreLikeThis of Lucene подмножеством моих документов

Я использую Lucene для индексации содержимого моего сайта и предоставления возможности поиска. Я также использую MoreLikeThis от Lucene для создания «связанных страниц» для сайта. Мой сайт многоязычный, поэтому мне нужно ограничивать MoreLikeThis определенным языком за раз.

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


person checklist    schedule 25.11.2012    source источник
comment
Меня это тоже интересует, за исключением того, что в моем случае существуют тысячи подмножеств, которые все должны иметь раздельные вычисления релевантности. : - /   -  person treat your mods well    schedule 12.06.2015
comment
При дальнейшем чтении кода я подозреваю, что это потребует изменения индексации и, возможно, даже формата индекса. Похоже, что термины хранятся только один раз и глобально, с подсчетом документов. Другим подходом может быть специальный IndexReader, который каждый раз выполняет вычисление docFreq, но я не знаю, какой ценой!   -  person treat your mods well    schedule 12.06.2015


Ответы (2)


MoreLikeThis возвращает Объект запроса.
MoreLikeThis mlt = new MoreLikeThis(ir);
Reader target = ... // orig source of doc you want to find similarities to
Query query = mlt.like( target);

Вы можете создать второй запрос, который проверяет язык. Затем оберните оба запроса, используя. Вы можете создать BooleanQuery, например:
BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.add(MoreLikeThisQuery, BooleanClause.Occur.MUST);
booleanQuery.add(languageQuery, BooleanClause.Occur.MUST);

Не очень эффективно, но он выполнит свою работу, если у вас небольшой корпус.

person Gili Nachum    schedule 25.11.2012
comment
Что ж, если вы в настоящее время используете MLT для всего своего контента, то добавление языкового запроса не должно сильно ухудшить производительность (MLT намного тяжелее простого фильтра). Действительно эффективное решение будет отфильтровывать язык сначала, а затем MLT будет работать только с набором отфильтрованных документов (необходимо изучить, как MLT работает внутри, чтобы увидеть, возможно ли это). - person Gili Nachum; 27.11.2012

В итоге я просто разделил на несколько индексов, а затем выполнил запрос MLT. В противном случае это слишком тяжелая просьба. Я надеюсь, что разработчики Lucene будут

person checklist    schedule 12.12.2012