Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Lucene.net找不到正确的匹配项_C#_Lucene.net - Fatal编程技术网

C# Lucene.net找不到正确的匹配项

C# Lucene.net找不到正确的匹配项,c#,lucene.net,C#,Lucene.net,我是lucene.net的新手,在一些搜索中,我发现我可以在我的项目中使用lucene 现在我无法修复代码中的错误 让我用代码解释一下 首先,我创建了如下索引 var strIndexDir = path; Directory indexDir = FSDirectory.Open(new DirectoryInfo(strIndexDir)); Analyzer std = new StandardAnalyzer(global::Lucene.

我是lucene.net的新手,在一些搜索中,我发现我可以在我的项目中使用lucene

现在我无法修复代码中的错误

让我用代码解释一下

首先,我创建了如下索引

        var strIndexDir = path;
        Directory indexDir = FSDirectory.Open(new DirectoryInfo(strIndexDir));
        Analyzer std = new StandardAnalyzer(global::Lucene.Net.Util.Version.LUCENE_30)

     foreach (var res in resturant)
        {

            var doc = new Document();

          restaurantName = new Field("Name",
                res.Name, Field.Store.YES,
                Field.Index.ANALYZED, Field.TermVector.YES);
            var restaurantId = new Field("Id",
                res.RestaurantId.ToString(), Field.Store.YES,
                Field.Index.NO, Field.TermVector.NO);
            var restaurantSlug = new Field("Slug",
                res.Slug, Field.Store.YES,
                Field.Index.NO, Field.TermVector.NO);
            var restaurantAddress = new Field("Address",
                res.Address ?? "empty", Field.Store.YES,
                Field.Index.NOT_ANALYZED, Field.TermVector.YES);
            var resturantType = new Field("Type",
                "restaurant", Field.Store.YES,
                Field.Index.NO, Field.TermVector.NO);
            doc.Add(restaurantName);
            doc.Add(restaurantId);
            doc.Add(restaurantSlug);
            doc.Add(restaurantAddress);
            doc.Add(resturantType);

            idxw.AddDocument(doc);
        }
        idxw.Optimize();
        idxw.Close();
我认为我自己的索引是可以的,因为我只想找到餐厅的名称和地址

对于搜索查询,我也使用这种方式

     string strIndexDir = path;
        Analyzer std = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);




     var indexReader = IndexReader.Open(FSDirectory.Open(path), readOnly: true);
        var parserName =
        new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_30, "Name", std);
        var parserAddress =
          new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_30, "Address", std);
        var parserSlug =
          new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_30, "Slug", std);
        var parserTitle =
          new Lucene.Net.QueryParsers.QueryParser(Lucene.Net.Util.Version.LUCENE_30, "Title", std);
        var searcher = new IndexSearcher(FSDirectory.Open(path));

        using (var srchr = new IndexSearcher(IndexReader.Open(directory,true)))
        {


            var qryName = parserName.Parse(q);
            var qryAddress = parserAddress.Parse(q);
            var qrySlug = parserSlug.Parse(q);
            var qrytitle = parserTitle.Parse(q);
            var cllctr = TopScoreDocCollector.Create(10, true);
            searcher.Search(qryName, cllctr);
            searcher.Search(qryAddress, cllctr);
            searcher.Search(qrySlug, cllctr);
            searcher.Search(qrytitle, cllctr);
            var hits = cllctr.TopDocs().ScoreDocs;
现在让我说问题出在哪里

例如,我搜索这个关键字(q=“box”)希望找到餐厅名称,名称为boxshaharkgharb,并希望使用“box”

问题是hot始终为0,但当我键入boxshaharkgharb(例如,q=“boxshaharkgharb”)时,结果是正常的


通过使用通配符,你可以强制Lucene按片段进行搜索


如果您需要对所有查询执行此操作,您需要查看您的选择,因为Lucene使用整词搜索的性能最好。原因是,默认情况下,通配符变成了常数分数查询,而术语搜索使用相关性对结果进行排名。

非常感谢@Giedrius,你能给我解释一下吗?我需要植入代码来理解自从我使用Lucene以来已经有一段时间了,但若我没记错的话,简单地将查询写成
box*
应该会得到您想要的结果。如果您不希望强制用户编写*,您可以自行添加它,如下面的回答:非常感谢@Giedrius,我可以问您lucene支持通配符的版本吗?从我在这里读到的内容来看:它肯定会在2.1版本之后得到支持。