[英]Filtering results of Lucene search
讓我解釋一下我的問題。 我正在使用Lucene在asp.net網頁中搜索並顯示結果。 當我搜索時,Lucene顯示與我的搜索相關的所有記錄。 例如,我有5000條名為John的記錄。 如果我鍵入John,它將顯示所有這5000條記錄。 我想根據其他一些屬性限制這5000條記錄。 我有四個屬性,即名字,姓氏,DOB和ID。 在那5000條記錄中,我希望它只顯示用戶輸入的DOB。 這意味着只顯示擁有DOB為5/12/1998的約翰的記錄。 這會將結果限制為大約50條記錄。 完成后,我想搜索具有相同ID的所有字段,然后顯示這些記錄。 最后,我將使用給定的DOB和相同的ID記錄John的記錄。
注意: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);
}
請讓我知道,如果你有任何問題。
我討厭這樣做。 但我找到了答案。
它的
Filter fil= new QueryWrapperFilter(new TermQuery( new Term(field, "5/12/1998")));
var hits = indexSearcher.Search(QueryMaker(searchString, searchfields), fil);
您可以使用上面的代碼過濾結果。
我不認為在過濾查看值后可以返回。 有人不同意嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.