Количество обращений к инвертированному индексу Lucene

В Lucene я хочу знать о количестве доступов в инвертированном индексе.

Может быть, у Lucene такой перевернутый индекс,

кошка собака
----- -----
d01 d02
d02 d01
d03 d03
----- -----

Если я использую запрос «кошка-собака», Lucene будет последовательно обращаться к инвертированному индексу. Тогда я прошу результат top-2, всего с 4 обращениями Lucene вернет d01, d02. В этом случае я хочу знать время доступа (в этом примере «4»).

В настоящее время я использую Lucene вот так.

Query q = new QueryParser(Version.LUCENE_35, "title", analyzer).parse(querystr);
int hitsPerPage = 10;
IndexSearcher searcher = new IndexSearcher(index, true);
TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true);
searcher.search(q, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;

Спасибо.


person prory    schedule 02.02.2012    source источник


Ответы (1)


Асимптотически, если имеется p совпадений и вы нашли лучшие k, время будет p log k. Итак, в вашем случае 6 log 2 = 6. (Конечно, при таких малых числах эта формула дает смехотворные результаты).

См. это для получения дополнительной информации.

Обратите внимание, что «два лучших» означает не «первые два», а скорее «два самых результативных». В зависимости от весов в вашем примере Lucene может игнорировать d03.

person Xodarap    schedule 02.02.2012
comment
Спасибо. Я думал, что Lucene сохранит сортировку с инвертированным индексом по количеству терминов. Таким образом, в этом примере два лучших были двумя наивысшими баллами. Вы имеете в виду, что Lucene всегда имеет доступ к (p log k) времени? Я думал, что если у Lucene такой инвертированный индекс, Lucene остановит доступ после 4-го доступа. Я ошибся? - person prory; 03.02.2012
comment
@prory: документы сортируются по идентификатору для каждого термина, а не по количеству баллов. Это более быстрый способ сделать это, чем сортировка по количеству баллов, но это слишком долго, чтобы объяснять это здесь. Все, что я могу сказать, это: прочитайте связанный пост в блоге и прикрепленный документ. Например, если в d01 и d02 есть только слова «кошка» и «собака», то Lucene остановится после четвертого доступа. Но слишком сложно сказать, что всегда потребуется только 4. - person Xodarap; 03.02.2012