0

私は SOLRNET を使用しており、SOLR の MoreLikeThis 機能を使用して、返されるドキュメントと同様のドキュメントを取得しています。私のコードは次のようになります (この場合、ロードしたい特定のドキュメントを既に知っているので、ID を検索しています):

var solr = ServiceLocator.Current.GetInstance<ISolrOperations<MyDocument>>();

var queryOptions = new QueryOptions()
{
    MoreLikeThis = new MoreLikeThisParameters(new[] { "text" })
    {
        MinDocFreq = 1, // minimum document frequency
        MinTermFreq = 1, // minimum term frequency
    },
};

var document = solr.Query(new SolrQuery(string.Concat("id:", id)),queryOptions);

クエリを実行すると、すべてが正常に機能し、ドキュメントが MyDocument 型として取得されます。SOLRNET の SimilarResults ディクショナリを反復処理して、同様のドキュメントが実際に返されることを確認できます。私が疑問に思っているのは、返される同様のドキュメントを表す MyDocument タイプのコレクションが取り込まれるように、MyDocument クラスのフィールドをマップするネイティブな方法があるかどうかです。

SimilarDocuments を 1 つずつループする必要がある場合は問題ありませんが、これを行う簡単な方法があると思います。MyDocument クラスの属性を使用してマッピングするなど、明らかなトリックを試しました

   [SolrField("moreLikeThis")]
   public IDictionary<string,IList<MyDocument>> SimilarResults { get; set; }

どんな助けでも大歓迎です、

前もって感謝します

JP

4

1 に答える 1

3

同様の結果はドキュメントの一部ではなく、インデックスを更新するたびに実際に変更される可能性があります。

いずれにせよ、solr.Query は単なるドキュメントではなく ISolrQueryResults オブジェクトを返すため、document.SimilarResults に類似したドキュメントのリストがあり、必要なプロパティに割り当てることができます。

于 2011-10-04T09:34:13.530 に答える