5

桟橋を使用してWindowsマシンでSolrを実行しています。Spatial Solrプラグインをダウンロードしましたが、ついに起動して実行することができました。また、Solrnetを使用して、asp.netmvcプロジェクトからSolrに対してクエリを実行しています。

現在、インデックスへのデータの追加は正常に機能しているようで、SpatialTierUpdateProcessorFactoryも同様に機能します。

問題は:

Solrnetライブラリを使用して、通常のクエリに空間クエリを追加するにはどうすればよいですか。「ExtraParams」パラメータを使用して追加しようとしましたが、うまくいきませんでした。

これは、空間クエリとデータ範囲クエリを組み合わせようとしている私の例です。日付範囲クエリは、空間クエリがアタッチされていなくても正常に機能します。

new SolrQuery("{!spatial lat=51.5224 long=-2.6257 radius=10000 unit=km calc=arc threadCount=2}") && new SolrQuery(MyCustomQuery.Query) && new SolrQuery(DateRangeQuery);

これにより、Solrに対して次のクエリが実行されます。

(({!spatial lat=51.5224 long=-2.6257 radius=100 unit=km calc=arc threadCount=2} AND *:*) AND _date:[2010-05-07T13:13:37Z TO 2011-05-07T13:13:37Z])

そして、私が返すエラーメッセージは次のとおりです。

リモートサーバーがエラーを返しました:(400)不正な要求。

SEVERE: org.apache.solr.common.SolrException: org.apache.lucene.queryParser.Pars
eException: Cannot parse '(({!spatial lat=51.5224 lng=-2.6257 radius=10000 unit=
km calc=arc threadCount=2} AND *:*) AND _date:[2010-05-07T13:09:49Z TO 2011-05-0
7T13:09:49Z])': Encountered " <RANGEEX_GOOP> "lng=-2.6257 "" at line 1, column 2
4.
Was expecting:
    "}" ...

ここで、Solr Web管理ページを使用して、それに対して次のクエリを実行すると、すべてが正常に機能します。

{!spatial lat=50.8371 long=4.35536 radius=100 calc=arc unit=km threadcount=2}text:London

SolrNetを使用して空間関数を呼び出すための最良/正しい方法は何ですか。クエリのそのビットをクエリ文字列に手動で追加するための最良の方法はありますか?

4

1 に答える 1

5

LocalParamsクラスを使用して、Solr で LocalParamsを表します。

solr.Query(new LocalParams {
    {"type", "spatial"},
    {"lat", "-51.5224"},
    {"long", "-2.6257"},
    {"radius", "10000"},
    {"unit", "km"},
    {"calc", "arc"},
    {"threadCount", "2"},
} + Query.Field("text").Is("London"));

これは、SolrNet 0.3.0b1 以降で利用できます。

于 2010-05-07T16:56:10.593 に答える