Позвольте мне объяснить мою проблему. Я использую Lucene для поиска и отображения результатов на веб-странице asp.net. Когда я ищу, Lucene отображает все записи, связанные с моим поиском. Например, у меня 5000 записей с именем John. Если я нахожу John, он отображает все эти 5000 записей. Я хочу ограничить эти 5000 записей на основе другого атрибута. У меня есть четыре атрибута: Имя, Фамилия, ДОБ и ИД. Из этих 5000 записей я хочу, чтобы пользователь отображал только те, у которых введенный DOB. Это означает, что вы просто показываете записи john, у которых есть DOB как 5/12/1998. Это ограничит результат примерно 50 записями. Как только я закончил с этим, я хочу искать все поля, у которых одинаковый идентификатор, и затем отображать эти записи. В конце концов, у меня будут записи Джона с данным DOB и тем же ID.Результаты поиска в Lucene
Примечание: Фильтрация DOB предназначена для обеспечения безопасности.
Ниже приведен мой код для поиска.
List<SearchResults> Searchresults = new List<SearchResults>();
string indexFileLocation = @"C:\o";
Lucene.Net.Store.Directory dir = Lucene.Net.Store.FSDirectory.GetDirectory(indexFileLocation);
string[] searchfields = new string[] { "fname", "lname", "dob", "id"};
IndexSearcher indexSearcher = new IndexSearcher(dir);
var hits = indexSearcher.Search(QueryMaker(searchString, searchfields));
for (int i = 0; i < hits.Length(); i++)
{
SearchResults result = new SearchResults();
result.fname = hits.Doc(i).GetField("fname").StringValue();
result.lname = hits.Doc(i).GetField("lname").StringValue();
result.dob = hits.Doc(i).GetField("dob").StringValue();
result.id = hits.Doc(i).GetField("id").StringValue();
Searchresults.Add(result);
}
Пожалуйста, дайте мне знать, если у вас есть вопросы.
Вы можете указать поля, которые хотите выполнить поиск, путем: 'FirstName: John AND DOB: 5/12/1998'. Для удостоверения личности я боюсь, что Lucene не поддерживает этот тип операции. Вы всегда можете извлекать записи и фильтровать их снова ... – rae1
@ rae1n Как я уже говорил, это делается для целей безопасности. Я не хочу, чтобы пользователь вводил его. Я ищу что-то вроде этого. Фильтр LEA = новый QueryWrapperFilter (новый TermQuery (новый термин («5/12/1998», поле)) ;. Однако я не думаю, что правильно задаю фильтр. – Huzaifa
Я имел в виду, что вам не нужно указывать фильтр за отзыв, просто добавьте предложение AND к вашему запросу с помощью 'DOB: 5/12/1998'. Вы можете использовать 'BooleanQuery' для задания двух запросов. – rae1