簡體   English   中英

使用lucene.Net搜索問題

[英]Searching issue using lucene.Net

我正在嘗試使用Lucene .Net的搜索引擎。 我遵循了網站上的一些文檔,但是由於它無法按預期工作,我可能會錯過一些東西。

這是代碼:

var stringBuilder = new StringBuilder();
        var pdfReader = new PdfReader(@"c:\Test\testRoot.pdf");
        for (var page = 1; page <= pdfReader.NumberOfPages; page++)
        {
            stringBuilder.Append(PdfTextExtractor.GetTextFromPage(pdfReader, page) + " ");
        }
        if (stringBuilder.ToString().Contains("new"))
        {
            Console.WriteLine("New is present in the text!");
        }
        const string strIndexDir = @"C:\Index";
        Directory indexDir = FSDirectory.Open(strIndexDir);
        Analyzer std = new StandardAnalyzer(Version.LUCENE_29);
        var idwx = new IndexWriter(indexDir, std, true, IndexWriter.MaxFieldLength.UNLIMITED);
        var doc = new Document();            
        var fdl = new Field("testRoot", stringBuilder.ToString(), Field.Store.YES, Field.Index.ANALYZED);
        doc.Add(fdl);
        idwx.AddDocument(doc);
        idwx.Optimize();
        idwx.Dispose();
        Console.WriteLine("Indexing Done !");


        var parser = new QueryParser(Version.LUCENE_29, "new", std);
        var qry = parser.Parse(parser.Field);
        Directory directory = FSDirectory.Open(new System.IO.DirectoryInfo(strIndexDir));
        Searcher srch = new IndexSearcher(IndexReader.Open(directory, true));
        TopScoreDocCollector cllstr = TopScoreDocCollector.Create(100, true);
        ScoreDoc[] hits = cllstr.TopDocs().ScoreDocs;
        for (int i = 0; i < hits.Length; i++)
        {
            int docId = hits[i].Doc;
            float score = hits[i].Score;
            Document docy = srch.Doc(docId);
            Console.WriteLine(docy.Get("text"));
        }
        Console.ReadLine();

事實是,新詞出現在我的PDF文本中,因為它出現在'if'中。

但是最后,當我嘗試尋找比賽時,這里什么都沒有。

編輯:

我做了很少的更改,但仍然無法正常工作:

var stringBuilder = new StringBuilder();
        var pdfReader = new PdfReader(@"c:\Test\testRoot.pdf");
        for (var page = 1; page <= pdfReader.NumberOfPages; page++)
        {
            stringBuilder.Append(PdfTextExtractor.GetTextFromPage(pdfReader, page) + " ");
        }
        if (stringBuilder.ToString().Contains("new"))
        {
            Console.WriteLine("New is present in the text!");
        }
        const string strIndexDir = @"C:\Index";
        Directory indexDir = FSDirectory.Open(strIndexDir);
        Analyzer std = new StandardAnalyzer(Version.LUCENE_29);
        var idwx = new IndexWriter(indexDir, std, true, IndexWriter.MaxFieldLength.UNLIMITED);
        var doc = new Document();            
        var fdl = new Field("testRoot", stringBuilder.ToString(), Field.Store.YES, Field.Index.ANALYZED);
        doc.Add(fdl);
        idwx.AddDocument(doc);
        idwx.Optimize();
        idwx.Commit();
        idwx.Dispose();

        Console.WriteLine("Indexing Done !");
        var parser = new QueryParser(Version.LUCENE_29, "", std);
        var qry = parser.Parse("new*");
        Directory directory = FSDirectory.Open(new System.IO.DirectoryInfo(strIndexDir));
        Searcher srch = new IndexSearcher(IndexReader.Open(directory, true));
        var lol = srch.Search(qry, 100);
        ScoreDoc[] hits = lol.ScoreDocs;
        for (int i = 0; i < hits.Length; i++)
        {
            int docId = hits[i].Doc;
            float score = hits[i].Score;
            Document docy = srch.Doc(docId);
            Console.WriteLine(docy.Get("testRoot"));
        }

謝謝您的幫助:)

嘗試以下任一方法:

var parser = new QueryParser(Version.LUCENE_29, "testRoot", std);

要么:

var qry = parser.Parse("testRoot:new*");

您需要指定要搜索的正確字段。出現的testRoot是您要查找的字段名稱。 QueryParser的第二個參數指定要搜索的默認字段。 在您提供的第一個示例中,您將其稱為“ new”,它似乎不是要添加到文檔中的字段的名稱(本質上,在這種情況下,查詢看起來像: new:new )。 除非您在查詢中指定要搜索的字段,例如myField:findThis (請參閱查詢解析器語法 ),否則將使用此默認字段進行搜索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM