我正在使用Jetty在Windows机器上运行Solr。我下载了 空间Solr插件 我终于设法开始运行。我还使用Solrnet从我的ASP.NET MVC项目中查询Solr。

现在,将数据添加到我的索引中似乎可以正常工作,并且PatialTierUpdateProcessorFactory也确实有效。

问题是:

如何使用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调用空间函数的最佳/正确方法。以某种方式手动将查询的一点添加到查询字符串中是最好的方法吗?

有帮助吗?

解决方案

使用 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开始可用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top