0

NuGet Package Manager を使用して Lucene.net 2.9.4.1 をダウンロードし、次のコードを使用してテスト インデックスを作成しました。

Dim sysDir As New System.IO.DirectoryInfo(Server.MapPath("~/index"))
Dim indexDir As Store.Directory = Store.FSDirectory.Open(sysDir)
Dim analyzer As Analysis.Analyzer = New Analysis.Standard.StandardAnalyzer(Util.Version.LUCENE_29)
Dim indexWriter As Index.IndexWriter = New Index.IndexWriter(indexDir, analyzer, True, Index.IndexWriter.MaxFieldLength.UNLIMITED)

Dim doc As Documents.Document = New Documents.Document()
Dim fldContent As Documents.Field = New Documents.Field("content", "The quick brown fox jumps over the lazy dog", Documents.Field.Store.YES, Documents.Field.Index.ANALYZED, Documents.Field.TermVector.YES)
doc.Add(fldContent)

indexWriter.AddDocument(doc)
indexWriter.Optimize()

indexWriter.Close()
indexDir.Close()

次に、検索を実行するためのコードを書き始めると、TopDocs クラスの totalHits プロパティにアクセスできません。コードは次のとおりです。

Dim sysDir As New System.IO.DirectoryInfo(Server.MapPath("~/index"))
Dim indexDir As Store.Directory = Store.FSDirectory.Open(sysDir)
Dim searcher As Search.IndexSearcher = New Search.IndexSearcher(indexDir, True)

Dim searchTerm As Index.Term = New Index.Term("content", "fox")
Dim query As Search.Query = New Search.TermQuery(searchTerm)
Dim tdocs As Search.TopDocs = searcher.Search(query, Nothing, 100)

「tdocs」と入力してから次の行にドットを入力すると、GetMaxScore メソッドと SetMaxScore メソッド、および MaxScore プロパティにしかアクセスできません。「totalHits」というプロパティは表示されません。

何か不足していますか?Lucene.net.Search.Hits (廃止されたと言われています) の代わりに Lucene.net.Search.TopDocs を使用しているサンプル コードはありますか?

4

3 に答える 3

2

これは、VB を使用しているためです。現在、Lucene は CLS に準拠していません。

次のリリースで修正されるバグと関係があると 思います。https://issues.apache.org/jira/browse/LUCENENET-476

于 2012-06-28T18:40:55.247 に答える
1

サンプル C# コードは次のとおりです。

TopDocs topDocs = searcher.Search(query, luceneHitsLimit);
if (topDocs != null) {
    int totalResults = topDocs.totalHits;
    ScoreDoc[] scoreDocs = topDocs.scoreDocs;
    foreach(ScoreDoc scoreDoc in scoreDocs) {
        Document doc = searcher.Doc(scoreDoc.doc);
        ...
    }
}
于 2012-06-28T10:15:06.693 に答える
0

これはおそらく少し遅れていることはわかっていますが、将来あなたや他の誰かに役立つことを願っています.

2.9.4 の問題を回避するために、TopDocs クラスのソースを編集しました。動作しない理由は、VB では大文字と小文字が区別されないのに対し、C# では大文字と小文字が区別されるためです (ご存知のとおり)。

TopDocs クラスには、totalHits int プロパティと TotalHits int プロパティがあります。コードを見た後、TotalHits プロパティは totalHits 変数を取得/設定するだけであることに気付きました。そのため、クラス内で totalHits 変数の名前を totalHits_obsolete に変更し、ライブラリを再構築しました。

ビルドするとすぐに、別のプロジェクトが VB.Net コードから TotalHits プロパティにアクセスできるようになりました。

于 2012-07-20T19:23:22.937 に答える