lucene.net
c# で最初に表示されるように、同じ単語が複数回含まれている説明に重みを追加する方法を見つけようとしています。
例:
前提条件:
次のようなアイテムのリストがあるとしましょう。
- Exchange の復元
- バックアップ交換
- exchange は非常に優れたツールです。exchange には多数のメールボックスを含めることができます
シナリオ:
を検索しexchange
ます。
リストは次の順序で返されます。
- (これは 2 と同じ重みを持ち、最初にインデックスに追加されました)
- (1 と同じ重みを持ち、インデックス秒に追加されました)
- (その中に交換の参照がありますが、その長さは 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;
}