1

lucene.netc# で最初に表示されるように、同じ単語が複数回含まれている説明に重みを追加する方法を見つけようとしています。

例:
前提条件:

次のようなアイテムのリストがあるとしましょう。

  1. Exchange の復元
  2. バックアップ交換
  3. exchange は非常に優れたツールです。exchange には多数のメールボックスを含めることができます

シナリオ:

を検索しexchangeます。

リストは次の順序で返されます。

  1. (これは 2 と同じ重みを持ち、最初にインデックスに追加されました)
  2. (1 と同じ重みを持ち、インデックス秒に追加されました)
  3. (その中に交換の参照がありますが、その長さは 1 と 2 より大きいです)

そのため#3、説明に複数回交換があるため、最初に表示されるようにしています。

これは、Similarity を設定したことを示すコードです。

// set up lucene searcher
            using (var searcher = new IndexSearcher(directory, false))
            {
                var hits_limit = 1000;
                var analyzer = new StandardAnalyzer(Version.LUCENE_29);

                searcher.Similarity = new test();

                // search by single field
                if (!string.IsNullOrEmpty(searchField))
                {
                    var parser = new QueryParser(Version.LUCENE_29, searchField, analyzer);
                    var query = parseQuery(searchQuery, parser);

                    var hits = searcher.Search(query, hits_limit).ScoreDocs;
                    var results = mapLuceneToDataList(hits, searcher);
                    analyzer.Close();
                    searcher.Dispose();
                    return results;
                }
                // search by multiple fields (ordered by RELEVANCE)
                else
                {
                    var parser = new MultiFieldQueryParser
                        (Version.LUCENE_29, new[] { "Id", "Name", "Description" }, analyzer);

                    var query = parseQuery(searchQuery, parser);
                    var hits = searcher.Search
                    (query, null, hits_limit, Sort.RELEVANCE).ScoreDocs;
                    var results = mapLuceneToDataList(hits, searcher);
                    analyzer.Close();
                    searcher.Dispose();
                    return results;
                }
4

1 に答える 1

2

免責事項: 私は Lucene (Lucene.NET ではなく) についてのみ話すことができますが、同じ原則を使用して構築されていると信じています。

ドキュメント #1 と #2 が最初に表示される理由は、フィールドの重み (#1 の場合は 1/2、#2 の場合は 1/2) が #3 の 2/11 よりも高いためです (ストップ ワードを使用していないと仮定します)。ここでのポイントは、最初の 2 つの文書の「交換」という用語は、より希薄な 3 番目の文書よりもはるかに重要であるということです。これは、デフォルトの類似性アルゴリズムがどのように機能するかです。実際には、指定されたリンクで確認できるように、これはもう少し複雑です。

したがって、あなたが求めているのは、代替の類似性アルゴリズムです。同様の議論がここにありMySim、あなたが望むものに近いものを達成しようとしていると私は信じています。この類似度インスタンスをインデックス ライターとサーチャーの両方に設定することを忘れないでください。

于 2013-01-12T21:42:55.403 に答える