C# Lucene搜索的过滤结果

C# Lucene搜索的过滤结果,c#,lucene,search-engine,lucene.net,C#,Lucene,Search Engine,Lucene.net,让我解释一下我的问题。我正在使用Lucene在asp.net网页中搜索和显示结果。当我搜索时,Lucene会显示与我的搜索相关的所有记录。例如,我有5000张名为约翰的唱片。如果我输入John,它将显示这5000条记录。我想基于其他属性限制这5000条记录。我有四个属性,即名字、姓氏、DOB和ID。在这5000条记录中,我希望它只显示用户输入DOB的记录。这意味着只需显示john的记录,其DOB为5/12/1998。这将把结果限制在50条记录左右。完成后,我希望搜索具有相同ID的所有字段,然后显

让我解释一下我的问题。我正在使用Lucene在asp.net网页中搜索和显示结果。当我搜索时,Lucene会显示与我的搜索相关的所有记录。例如,我有5000张名为约翰的唱片。如果我输入John,它将显示这5000条记录。我想基于其他属性限制这5000条记录。我有四个属性,即名字、姓氏、DOB和ID。在这5000条记录中,我希望它只显示用户输入DOB的记录。这意味着只需显示john的记录,其DOB为5/12/1998。这将把结果限制在50条记录左右。完成后,我希望搜索具有相同ID的所有字段,然后显示这些记录。最后,我会有John的记录,有给定的DOB和相同的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);

        }
List Searchresults=newlist();
字符串indexFileLocation=@“C:\o”;
Lucene.Net.Store.dir=Lucene.Net.Store.FSDirectory.GetDirectory(indexFileLocation);
字符串[]搜索字段=新字符串[]{“fname”、“lname”、“dob”、“id”};
IndexSearcher IndexSearcher=新的IndexSearcher(目录);
var hits=indexSearcher.Search(QueryMaker(searchString,searchfields));
对于(int i=0;i

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

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

您可以使用上述代码过滤结果


我不认为在筛选后返回查找值是可能的。有人不同意吗

您可以通过执行以下操作指定要搜索的字段:
FirstName:John和DOB:5/12/1998
。至于身份证,恐怕Lucene不支持那种类型的操作。您可以随时获取记录并再次筛选它们…@rae1n,正如我之前所说,这是出于安全目的。我不希望用户键入它。我在找这样的东西。Filter LEA=新查询rapperfilter(新术语查询(新术语(“5/12/1998”,字段));。但是,我认为我没有正确地指定筛选器。我的意思是,您不需要每次都指定筛选器,只需使用
DOB:5/12/1998
在查询中添加AND子句即可。您可以使用
BooleanQuery
指定这两个查询。@rae1n oops这就是答案。术语的顺序是错误的。它的字段值。哦!我想知道。。。但是由于没有运行代码,我认为您是正确的=)这是一个非常简单的解决方案,可以正常工作。我最喜欢的种类:)
Filter fil= new QueryWrapperFilter(new TermQuery( new Term(field, "5/12/1998")));
var hits = indexSearcher.Search(QueryMaker(searchString, searchfields), fil);