Я предлагаю вам найти логику, чтобы пропустить этот тип итерации, но если в вашем контексте нет решения, то вы можете получить выигрыш в производительности с помощью следующего кода
1) во время индекса лучше всего поместить поле, которое вы хотите перебрать, в первое поле
Document doc = new Document();
Field companyField = new Field(...);
doc.Add(companyField);
...
2) тогда вам нужно определить FieldSelector следующим образом
class CompanyNameFieldSelector : FieldSelector
{
public FieldSelectorResult Accept(string fieldName)
{
return (fieldName == "companyName" ? FieldSelectorResult.LOAD_AND_BREAK : FieldSelectorResult.NO_LOAD);
}
}
3) Затем, когда вы хотите повторить и выбрать это поле, вы должны сделать что-то вроде этого
FieldSelector companySelector = new CompanyNameFieldSelector();
// when you iterate through your index
doc = hits.Doc(i);
doc.Get("companyName", companySelector);
Производительность приведенного выше кода намного выше, чем у предоставленного вами кода, поскольку он пропускает чтение ненужных полей документа и экономит время.