выбросить каждый документ в базе данных с Lucene - PullRequest
1 голос
/ 14 февраля 2012

У меня есть индекс, в котором мне нужно получить все документы со стандартным поиском, по-прежнему ранжированные по релевантности, даже если документ не является хитом.

Моя первая идея - добавить поле, которое всегда совпадает, но может исказить оценку релевантности.

1 Ответ

2 голосов
/ 18 февраля 2012

Используйте BooleanQuery, чтобы объединить ваш исходный запрос с MatchAllDocsQuery.Вы можете уменьшить влияние, которое это оказывает на оценку, установив повышение на MatchAllDocsQuery на ноль, прежде чем объединить его с основным запросом.Таким образом, вам не нужно добавлять фиктивное поле в индекс.

Например:

// Parse a query by the user.
QueryParser qp = new QueryParser(Version.LUCENE_35, "text", new StandardAnalyzer());
Query standardQuery = qp.parse("User query may go here");

// Make a query that matches everything, but has no boost.
MatchAllDocsQuery matchAllDocsQuery = new MatchAllDocsQuery();
matchAllDocsQuery.setBoost(0f);

// Combine the queries.
BooleanQuery boolQuery = new BooleanQuery();
boolQuery.add(standardQuery, BooleanClause.Occur.SHOULD);
boolQuery.add(matchAllDocsQuery, BooleanClause.Occur.SHOULD);

// Now just pass it to the searcher.

Это должно дать вам попадания из standardQuery, за которыми следуют остальныедокументы в указателе.

...