使用SolrNet进行空间搜索和多列

时间:2011-07-27 17:28:39

标签: solr full-text-search spatial solrnet

我是Solr的新手。使用以下Solrnet查询来运行我的搜索。

results = solr.Query(new LocalParams { { "type", "dismax" }, { "qf", "Title Description" } } + new SolrQuery(Keywords) , queryOptions);

上述查询无任何问题。我尝试使用以下内容在同一查询中进行空间搜索。

results = solr.Query(new LocalParams { { "type", "dismax" },{ "pt", "40.7143528,-74.0059731" },{ "sfield", "coords" },{ "d", "15" }, { "qf", "Title Description" } } + new SolrQuery(Keywords) , queryOptions);

以上查询不考虑空间搜索,而是返回所有文档的结果。

如果将“type”更改为“geofilt”,则相同的查询会执行空间搜索。

results = solr.Query(new LocalParams { { "type", "geofilt" },{ "pt", "40.7143528,-74.0059731" },{ "sfield", "coords" },{ "d", "15" }, { "qf", "Title Description" } } + new SolrQuery(Keywords) , queryOptions);

但这一次,它没有返回相关结果。即如果用户搜索“丰田”,则以上类型= geofilt的查询可能会在15公里内返回“FORD”。

你能指导我走向正确的方向吗?

1 个答案:

答案 0 :(得分:0)

这里有两个条款:关键字的dismax查询和地理空间查询,但是你试图将两者都塞进一个子句中。相反,将它们表示为单独的查询子句(单独的查询对象)。

伪代码:

var spatial = new LocalParams {{"type","geofilt"},...} + new SolrQuery("");
queryOptions.FilterQueries = new[] {spatial};
var keyword = new LocalParams { { "type", "dismax" }, { "qf", "Title Description" } } + new SolrQuery(Keywords);
var results = solr.Query(keyword, queryoptions);