过滤Lucene搜索结果

本文关键字:搜索结果 Lucene 过滤 | 更新日期: 2023-09-27 18:15:17

让我解释一下我的问题。我使用Lucene在asp.net网页中搜索和显示结果。当我搜索时,Lucene显示与我的搜索相关的所有记录。例如,我有5000条名为John的记录。如果我输入John,它会显示所有这5000条记录。我想根据其他属性限制这5000条记录。我有四个属性,即名,姓,出生日期和ID。在这5000条记录中,我希望它只显示用户输入DOB的记录。这意味着只显示出生日期为5/12/1998的john的记录。这将把结果限制在大约50条记录。完成这些后,我想搜索具有相同ID的所有字段,然后显示这些记录。最后我将有约翰的记录与给定的出生日期和相同的ID。

注:按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);
        }

过滤Lucene搜索结果

如果您有任何问题请告诉我。

我讨厌这样做。但我找到了答案。

Filter fil= new QueryWrapperFilter(new TermQuery( new Term(field, "5/12/1998")));
var hits = indexSearcher.Search(QueryMaker(searchString, searchfields), fil);

可以用上面的代码过滤结果。

我不认为这是可能的过滤后回去寻找值。有人不同意吗?