2

テキスト ファイルに 100 社の企業をリストしたドキュメントがあります。ルセンで索引付けされています。それ自体は保存されませんが、ベクトルは保存されます。リストの 1 社は Apple Inc. と呼ばれています。

「Apple Inc」というタイトルの別のドキュメントが lucene に保存されています。

以下のコードを使用して、このような検索をうまく実行できました。Lucene でドキュメントを見つけることができ、タイトル フィールドとコンテンツ フィールドの両方で検索を実行して、同様のドキュメントを見つけることができます。

私の質問は、このコードを変更して、タイトルにこの内容を含む他のドキュメントを見つけることができるようにするにはどうすればよいかということです。つまり、Apple というタイトルのドキュメントを表示するにはどうすればよいですか。

選択したドキュメントのコンテンツと特定のフィールド (タイトルなど) を検索したいと考えています。

 using (IndexSearcher searcher = new IndexSearcher(_Reader))
        {
            TermQuery tquery = new TermQuery(new Term("Oid", oid));
            TopDocs topdocs = searcher.Search(tquery, 1);
            int docId = topdocs.ScoreDocs[0].Doc;
            var moreLikeThis = new Lucene.Net.Search.Similar.MoreLikeThis(_Reader);
            moreLikeThis.Analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);
            moreLikeThis.SetFieldNames(fields);
            moreLikeThis.MinWordLen = 2;
            var query = moreLikeThis.Like(docId);
            TopScoreDocCollector collector = TopScoreDocCollector.Create(topCount, true);
            searcher.Search(query, collector);
            ScoreDoc[] hits = collector.TopDocs().ScoreDocs;
            var result = new List<string>();
            for (int i = 0; i < hits.Length; i++)
            {
                docId = hits[i].Doc;
                float score = hits[i].Score;
                if (score > 0.5)
                {
                    Document doc = searcher.Doc(docId);
                    result.Add(doc.Get("Oid"));
                }
            }
            return result;
        }
4

0 に答える 0