Lucen.net只返回一个热门

时间:2014-07-24 12:13:07

标签: .net lucene lucene.net

您好我刚刚开始在lucen.net上工作!!!在网上进行了大量搜索之后我发现了一种使用它的方法..

我想从txt文件中检测到一个字,该文件位于我的本地硬盘驱动器(D)上。 我正在实施这样的

        string indexFileLocation = @"C:\Index";
        Directory dir = FSDirectory.Open(indexFileLocation);

        //create an analyzer to process the text
       Analyzer analyzer = new
        Lucene.Net.Analysis.Standard.StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);
       IndexWriter indexWriter = new IndexWriter(dir, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);

       Document doc = new Document();

       Field fldContent = new Field
            ("text", System.IO.File.ReadAllText(@"D:\SampleDataFile.txt"),
            Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES);
        doc.Add(fldContent);
        indexWriter.AddDocument(doc);
        indexWriter.Optimize();
   //   indexWriter.Commit();
        indexWriter.Dispose();
        string strIndexDir = @"C:\Index";
        Analyzer std = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);
        QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "text", std);
        Query qry = parser.Parse("not");
        Directory Drct = FSDirectory.Open(new System.IO.DirectoryInfo(strIndexDir));
        Searcher Srch = new IndexSearcher(IndexReader.Open(Drct,true));
        TopScoreDocCollector cllctr = TopScoreDocCollector.Create(100, true);
        Srch.Search(qry, cllctr);
        ScoreDoc[] hits = cllctr.TopDocs().ScoreDocs;

我在C文件夹中创建索引...我的文本文件只包含Macavity cat lyrics

但是我得到的命中数的结果都是错误的我试过了

             word      |      hits 
             -------------------
            Macavity   |      1
              not      |      0
              And      |      0
              eyes     |      0

我试过的每一个单词都在歌词中,但它们没有得到点击。除了Macavity,它给出了点击率1,如果我添加了更多单词' Macavity'在同一行或下一行中,命中没有变化......总是为1。

请有人帮助我

1 个答案:

答案 0 :(得分:1)

匹配是匹配的文档,而不是文档中的匹配。由于您只有一个文档,因此最多只能有一个文档。

此外,“not”和“and”都是默认的英语停用词。它们将被StandardAnalyzer删除,因此您无法搜索它们。在实践中搜索它们通常没有用,但是如果你真的希望能够搜索它们,你可以将自己的一组自定义停用词传递给StandardAnalyzer构造函数。

然而,

对“眼睛”没有匹配似乎很奇怪。关于从文件中读取的内容可能有些奇怪。我会尝试调试System.IO.File.ReadAllText(@"D:\SampleDataFile.txt")的样子。