В каком поле был мой текст поиска в Lucene при использовании MultiFieldQueryParser?

Я использую Lucene.Net MultiFieldQueryParser для поиска по нескольким полям в моих документах. Я хочу узнать, в каком поле был найден текст. Например, мой поиск может выглядеть так:

var parser = new MultiFieldQueryParser(new string[] {"question","answer"}, analyzer);
var query = parser.Parse(searchphrase);

for(int idx=0; idx<hits.Length() ++idx)
{
     var doc = hits.Doc(i);
     // was this hit found in "answer" or "question"??
}

Я хочу определить, была ли найдена фраза для поиска в поле ответ или вопрос


person Keltex    schedule 22.05.2009    source источник


Ответы (2)


Единственный способ узнать это — сохранить поля, извлечь их для каждого попадания и самостоятельно проверить их на соответствие.

Попадание может быть результатом того, что некоторые термины поисковой фразы были найдены в вопросе, а остальные — в ответе. Если вы ищете вопросы и ответы вместе, вы не сможете легко определить, что было чем.

person erickson    schedule 22.05.2009

В целях отладки вы можете использовать explain(), который проведет вас через сопоставление. Это так же дорого, как и сам поиск, поэтому не так хорошо для производства. См. также Отладка проблем релевантности в поиске по Grant Ingersoll о других способах получения этой информации.

person Yuval F    schedule 23.05.2009