Solr 7-如何使用地理空间搜索进行全文搜索 如何在Solr 7中与地理空间进行全文合并?
关于这一点: 我必须进行结合全文和地理空间的查询。例如:Solr 7-如何使用地理空间搜索进行全文搜索 如何在Solr 7中与地理空间进行全文合并?,solr,lucene,Solr,Lucene,关于这一点: 我必须进行结合全文和地理空间的查询。例如: 框和全文或空间排序和全文 我无法找到一个好的查询字符串示例来生成所需的结果。我希望这是一个纯查询字符串,而不是一些Java方法,因为我使用的是Java以外的其他技术。Solr是非常深刻和混乱的,我知道我必须多读一些,但我在网上找不到这方面的好例子 所需查询字符串示例 [solr]/select?fq={!bbox sfield=point}&pt=34.04506799999999,-118.260849&d=10000&
框和全文
或空间排序和全文
我无法找到一个好的查询字符串示例来生成所需的结果。我希望这是一个纯查询字符串,而不是一些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和Elastic Search)都是在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进行弹性搜索。与非常易于使用的弹性搜索相比,Solr在其奇怪的方式上非常恼人。事情正如你所期望的那样运行,而不必深入研究怪癖。我将我的答案改编为solr 7.2.1示例: 启动solr by:
/bin/solr Start-e techproducts
我还将谷歌地图中的数据可视化:
您需要这些:
由框过滤器绑定:
- fq={!bbox}
- Solr字段:sfield=store
- 要从中搜索/排序的点:pt=36.35,-97.51
- 过滤器的距离:d=1200
- sort=geodist()asc
- q=一些+文本
- 字段存储的类型必须为位置:
- 您可以选择以下特殊字符: e、 g.fq=%7B%21bbox%20s字段%3地理位置%7D
/select?fq={!bbox sfield=point}&pt=34.04506799999999,-118.260849&d=10000&sort=geodist() asc&{!geofilt}&sfield=point&q=Panini
您应该更改sort
参数,然后将其删除或仅将其设置为score desc
。这样,您可以根据全文搜索查询中给出的分数进行排序
要考虑空间部分,您需要在查询中包含一个boosting函数。在大多数情况下,文档离感兴趣的点越近越好,因此您可能希望包含一个增强函数,该函数可以执行X/distance
。X
可以像1
一样简单,函数本身也可以更复杂。要在dismax
查询中执行此操作,您将使用bf
参数,如bf=div(1,geodist())
尝试一下,它应该可以工作,但当然需要一些调整 它应该可以在单个查询中实现。我已经把整个问题都写进了我的答案里。如果不行,请告诉我。可能是语法错误。我已经用一些其他数据检查了本地系统上的查询。我将我的答案改编为solr 7.2.1示例数据,以便您可以重现它。我还简化了查询。您只需要bbox或geofilt。仍然有0个结果:您必须确保您的全文查询查询在正确的字段上。我更喜欢edismax解析器。在这里,您可以通过qf参数指定字段。e、 g.qf=名称,文本混乱?主要问题是没有默认的搜索方式,而不在q参数中指定键,即q=字段:abc但不是q=abc谢谢!在hindsite中,我不需要去ElasticSearch,但我最终还是这样做了。它们本质上是Lucene的包装,但有时弹性似乎更容易一些。