私は現在、Solrnet を現在取り組んでいるプロジェクトと統合しようとしていますが、Solrnet に入力済みの POCO からドキュメントを生成させることさえできません。以下は、私が使用しているPOCOの例です
public class Person : ICustomInterface
{
[SolrField("text")]
public string ContactNumber { get; set; }
[SolrField("text")]
public string ContactFax { get; set; }
[SolrField("text")]
public string ContactEmail { get; set; }
[SolrField("text")]
public string FamilyName { get; set; }
[SolrField("text")]
public string GivenName { get; set; }
[SolrField("text")]
public string MiddleName { get; set; }
[SolrField("text")]
public string Title { get; set; }
[SolrField("text")]
public string Gender { get; set; }
[SolrField("text")]
public string PlaceOfBirth { get; set; }
[SolrField("text")]
public string CountryOfBirth { get; set; }
[SolrUniqueKey("id")]
public string Id { get; set; }
}
次のコードを使用して上記のインデックスを作成する前に、init 関数を呼び出しています。
Startup.Init<Person>("http://localhost:8080/solr-4.1.0");
次に、以下を呼び出して、オブジェクトのインデックスを作成しようとしています。
var solr = ServiceLocator.Current.GetInstance<ISolrOperations<Person>>();
solr.Add(mypoco);
solr.Commit();
「solr.Add(person)」のエラーは次のとおりです:「ドキュメントに必須の uniqueKey フィールドがありません: id」。送信されている http リクエストを見ると、これは理にかなっています。リクエストの本文は :<add><doc /></add>
です。
フィールドが取得されていないようです。さらに調べてみると、「AttributesMappingManager」は 0 件の結果を返しています。メソッドは以下にあり、「GetPropertiesWithAttribute」から見たコメント付きの結果です。
var props = type.GetProperties(BindingFlags.Instance | BindingFlags.Public); //returns properties correctly
var kvAttrs = props.Select(prop => new KeyValuePair<PropertyInfo, T[]>(prop, type.GetCustomAttributes<T>())); // correct number of keys of properties with Solrnet attributes, but values are empty
var propsAttrs = kvAttrs.Where(kv => kv.Value.Length > 0); // 0 results
return propsAttrs; // 0 results
これをテストプロジェクトに分割しようとしましたが、それでも同じ問題が発生します。インターフェイスの有無にかかわらず試してみましたが、まだうまくいきません。本当に単純なものが欠けている可能性がありますが、それが何であるかを知りたいです。
注: github リポジトリの Solrnet の最新バージョンを使用しています。
更新
「SampleSolrApp」ソリューションをテストし、いくつかの参照を修正しました (「HomeController.cs」で SolrNet.DSL が見つからなかった、SolrNet.DSL ref が見つからないようでした、コンパイルされた github リポジトリからの参照を追加しました)、サンプルは正しく初期化されているようです。AddInitialDocuments()
Application_Start のメソッドを介して「exampledocs」を投稿します。ただし、「指定されたキーは辞書に存在しませんでした」というエラーが表示された直後に機能します。「HtmlHelperMapperExtensions.cs」内。「Product」オブジェクトには正しい属性があり、マッパーが探しているフィールド名がありますが、フィールドが見つかりません (この場合は「cat」)。これは、SolrField属性が見つからないように見えるため、solrの有効なhttpリクエストを構築していないため、私が抱えている問題と一致します。
サンプルを別の PC でテストして、この問題が開発環境に関係しているかどうかを確認します。アドバイスや提案をいただければ幸いです。
Update 2
別の開発環境でテストしたところ、同じエラーが発生しました。そのため、サンプルでもGetCustomAttributes
拡張メソッドが pocos の属性を返していないようです。VS 2012 (.net 4.5、サンプル プロジェクトでは 3.5 をターゲット)、Win7 マシン上の IIS Express でサンプルを実行しています。さらなる調査のために、誰かが私を正しい方向に向けることができることを願っています。