关于这一点:https://lucene.apache.org/solr/guide/7_2/spatial-search.html
我必须执行 COMBINE 全文w / geo spatial的查询。例如:
box AND full text
或spatial sort AND full text
。
我无法找出产生此预期结果的良好查询字符串示例。我希望这是一个纯粹的查询字符串,而不是一些Java方法,因为我在Java以外的其他技术上使用它。 Solr是非常深刻和令人困惑的,我知道我必须阅读更多,但我找到的网上任何地方都没有很好的例子。
所需的查询字符串示例
[solr]/select?fq={!bbox sfield=point}&pt=34.04506799999999,-118.260849&d=10000&sort=geodist() asc&{!geofilt}&sfield=point&q=Panini
因此,在这种情况下,将按距离排序,并按一些全文过滤"某些文字"值。
如果无法做到这一点,我相信它可能在弹性搜索中,但这些(Solr和弹性搜索)都建立在Lucene之上,所以看起来它应该适用于两者如果在一个上工作但随意提供回答弹性搜索。
示例返回
{
"responseHeader": {
"status": 0,
"QTime": 2,
"params": {
"q": "Panini",
"pt": "34.04506799999999,-118.260849",
"d": "10000",
"{!geofilt}": "",
"fq": "{!bbox sfield=point}",
"sort": "geodist() asc",
"sfield": "point"
}
},
"response": {
"numFound": 0,
"start": 0,
"docs": []
}
}
文档确实包含这个词组' Panini'但没有人回来。可能是由于默认方式是在Solr 7中处理全文?它使用了“Panini”这个术语的相同点。使用,字段点的类型为org.apache.solr.schema.PointType。
更新
我最终放弃了Solr for Elastic Search。与非常容易使用的弹性搜索相比,Solr以其奇怪的方式非常烦人。事情就像你期望的那样工作,而不必深究怪癖。
答案 0 :(得分:1)
我根据solr 7.2.1示例调整了我的答案:
启动solr:./bin/solr start -e techproducts
您需要这些query parameters:
以盒式过滤器绑定:
地理过滤器查询解析器bbox需要更多参数:
<强>类别:强>
全文查询:
solr示例数据的完整示例查询:
结果如预期:
<强>提示强>
答案 1 :(得分:1)
在这种情况下,您必须将全文搜索得分与空间距离结合起来。
因此,如果您的查询如下所示:
/select?fq={!bbox sfield=point}&pt=34.04506799999999,-118.260849&d=10000&sort=geodist() asc&{!geofilt}&sfield=point&q=Panini
您应该更改sort
参数并将其删除或将其设置为score desc
。这样,您就可以根据全文搜索查询给出的分数进行排序。
要考虑空间部分,您需要在查询中包含增强功能。在大多数情况下-文档离兴趣点越近越好,因此您可能希望包括执行X/distance
的增强功能。 X
可以像1
一样简单,函数本身也可以更复杂。为此,您可以在dismax
查询中使用bf
参数,例如bf=div(1,geodist())
。
尝试一下,它应该可以工作,但是当然需要进行一些调整。