私は 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