#c# #asp.net #lucene.net
#c# #asp.net #lucene.net
Вопрос:
Это мой код:
string word = txtQuery.Text;
IndexReader reader = IndexReader.Open("e:/indexDir");
IndexSearcher searcher = new IndexSearcher(reader);
QueryParser parser = new QueryParser("Content", new StandardAnalyzer());
Query query = parser.Parse(word);
Hits hits = searcher.Search(query);
int hitCount = hits.Length();
Response.Write("searcher order--------------</br>");
for (int temp = 0; temp < hitCount; temp )
{
Response.Write(searcher.Doc(temp).Get("Content") "</br>");
}
Response.Write("hits order--------------</br>");
for (int i = 0; i < hitCount; i )
{
Document doc = hits.Doc(i);
Response.Write( doc.Get("Content") "</br>");
Response.Write("Score-----" hits.Score(i) "Doc id---" hits.Id(i) "</br>");
}
Здесь я обнаружил, что порядок документов в поисковике — это просто то, как он читается читателем…
Но порядок обращений к документам зависит от оценки документа…
Так это то, что мы называем «РАНЖИРОВАНИЕМ ДОКУМЕНТОВ»???
Комментарии:
1. Я не совсем уверен, в чем здесь вопрос, но, по сути, Lucene заказывает результаты на основе оценки (т. Е. Наилучшего соответствия по сравнению с весом). На оценку может повлиять взвешивание терминов документа: чтобы установить вес, вам нужно посмотреть на функциональность полезной нагрузки в Lucene.
Ответ №1:
What I found here is that the searcher's document order is simply how it is read by the reader...But the hits documents order is on the basis of the score of the document
Нет, это не имеет ничего общего с «ранжированием документов». searcher.Doc
является оболочкой для indexReader.Doc
. Что вы делаете в первом цикле, так это просто считываете индекс (первые N документов в индексе), а не результаты поиска.
for (int i= 0; i < N ; i )
{
Response.WriteLine(searcher.Doc(i).Get("Content"));
}
Ваш первый цикл также будет работать так же, даже если вы не вызывали searcher.Search
.
Если вы проверите выходные данные обоих циклов, вы увидите, что на самом деле они содержат разные документы.
hits.Doc(n)
возвращает n-й документ в списке результатов, тогда searcher.Doc(n)
как возвращает n-й документ в индексе
Теперь ваш вопрос, Do the hits in Lucene rank the documents?
В Lucene.Net, результаты поиска упорядочены score
по умолчанию (если вы не указываете поля сортировки).