私はSolrNet(0.4)でSolr(3.6.0)を使用しています.SolrNetでの空間検索、特に距離による結果のソートに関するヘルプを探しています。
これが私のクエリです:
var postcode = new SolrQueryByField("Postcode", fields[13]);
var distance = new SolrQueryByDistance("LatLong", latitude, longitude, 1);
QueryOptions options = new QueryOptions();
options.Rows = 25;
options.AddFilterQueries(distance);
私は明らかなことを試しました:
options.OrderBy = new List<SortOrder> { new SortOrder("geodist()", Order.ASC)};
と:
options.OrderBy = new List<SortOrder> { SortOrder.Parse("geodist() asc") };
最後の試みとして、フィルタークエリと並べ替えを追加のパラメーターとして定義してみました。
options.ExtraParams = new Dictionary<string, string>
{
{"d", "1"},
{"sField", "LatLong"},
{"pt", latitudeString + "," + longitudeString},
{"fq", "{!geofilt}"},
{"sort", "geodist() asc"}
};
しかし、すべてが次のようになります。
SEVERE: org.apache.solr.common.SolrException: can not sort on unindexed field: geodist()
また、緯度、経度、距離のパラメーターを geodist() 関数に渡そうとしましたが、役に立ちませんでした。
SolrNet ではなく、手動でこのクエリを作成できます。問題は、クエリ文字列の順序と括弧の付け方に関係しているようです。
これは機能します(手作業で構築されています):
{d=1&sort=geodist()+asc&sfield=LatLong&version=2.2&rows=25&q=郵便番号:"LN1+2EB"&pt=52.1,-1.11&fq={!geofilt}}
これは失敗します (SolrNet によって構築されます):
{d=1&sort=geodist()+asc&q=(郵便番号:"LN1+2EB")&sField=LatLong&pt=53.289186,-0.705095&fq={!geofilt}&rows=25&version=2.2}
私はばかげたことをしていると思います。この機能を機能させる方法が必要です。どんなポインタでも大歓迎です。