そのため、Windows フォーム プロジェクトを立ち上げて実行しています。これは Lucene.Net ライブラリを使用しており、Lucene インデックスを作成しました。このプログラムは、ユーザーの要求を受け取り、いくつかのアルゴリズムを使用してそれらを実行し、結果セットを DataGridView に表示します。
その後、Tomcat サービスを使用して Solr 3.6.1 をセットアップし、XAMPP をインストールしました。schema.xml を次のように構成しました ( Can a raw Lucene index be loaded by Solr? のおかげです):
<fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
[...]
<field name="LuminaireId" type="string" indexed="true" stored="true"/>
<field name="LampCount" type="tdouble" multiValued="true" indexed="true" stored="true" required="false"/>
[...]
すべてのものをセットアップする方法についていくつかの例を検索し、値をマッピングするための製品クラスを思いつきました(さらにいくつかの値がありますが、画像を取得するには、これで十分だと思います)次のように:
public class SolrProduct
{
[SolrUniqueKey("LuminaireId")]
public string LuminaireId { get; set; }
[SolrField("LampCount")]
public ICollection<double> LampCount { get; set; }
}
簡単なテストクエリ (このメソッドを使用)
internal override List<KeyValuePair<Int64, Double>> CalculateRanking(List<T> checkedAttributes)
{
Startup.Init<SolrProduct>("http://localhost:8983/solr/");
var solr = ServiceLocator.Current.GetInstance<ISolrOperations<SolrProduct>>();
var results = solr.Query("LampCount:1");
// as is: no mapping for result-return for now, returning "null" instead
return(null);
}
ArgumentException を生成し、「System.Collections.ArrayList」型のオブジェクトを「System.String」型に変換できないことを通知します。インターネットでその問題を検索してプログラムをデバッグしても、まだ例外がわかりません。「LampCount」は multiValued-Field (以前は Lucene インデックスの NumericField) であり、schema.xml と Product.cs のマッピングが機能するはずです。
localhost:8983/solr/admin/ で Web インターフェイスを使用すると機能します。「LampCount:1」としてクエリを実行すると、正しく見つかったドキュメントが返されます。これは別の問題かもしれませんが、すべての「そのままの設定」で、Solr Web インターフェースの結果セット XML は (見つかったすべてのドキュメントで) 表示されます。
<arr name="LampCount">
<str>ERROR:SCHEMA-INDEX-MISMATCH,stringValue=1</str>
</arr>
Lucene インデックス ドキュメントの LampCount フィールドのインデックスを作成しました。
var valueField = new NumericField(internalname, Field.Store.YES, true);
valueField.SetDoubleValue(value);
doc.Add(valueField);
現時点では全体像が見えず、完全に途方に暮れているため、これが問題なのでしょうか。私の脳の結び目を解いていただければ幸いです。;-)
前もって感謝します!