我正在使用jetty在我的Windows机器上运行Solr。我已经下载了Spatial Solr Plugin,我最终设法启动并运行了。我也在使用Solrnet从我的asp.net mvc项目中查询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 Admin页面并对其执行以下查询,一切正常。
{!spatial lat=50.8371 long=4.35536 radius=100 calc=arc unit=km threadcount=2}text:London
使用SolrNet调用空间函数的最佳/正确方法是什么?是以某种方式手动将查询的那一位添加到查询字符串的最佳方法,是这样的?
答案 0 :(得分:5)
使用LocalParams
类来代表LocalParams in Solr:
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开始提供。