首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr 7-如何进行全文搜索w/ Geo空间搜索

Solr 7-如何进行全文搜索w/ Geo空间搜索
EN

Stack Overflow用户
提问于 2018-01-19 19:34:44
回答 2查看 3.9K关注 0票数 2

如何在Solr 7中实现w/ Geo Solr的全文组合?

关于这一点:2/spatial search.html

我必须进行全文w/ geo空间结合起来的查询。例如:

box AND full textspatial sort AND full text.

我无法找到一个很好的查询字符串示例来产生所需的结果。我希望这是一个纯查询字符串,而不是一些Java方法,因为我在Java以外的不同技术上使用它。Solr是非常深刻和令人困惑的,我知道我必须读更多,但没有好的例子,在任何地方的在线我发现。

所需的查询字符串示例

代码语言:javascript
复制
[solr]/select?fq={!bbox sfield=point}&pt=34.04506799999999,-118.260849&d=10000&sort=geodist() asc&{!geofilt}&sfield=point&q=Panini

因此,在这种情况下,将排序的距离,但也过滤一些完整的文本“一些文本”的价值。

如果不能做到这一点,我相信在弹性搜索是可能的,但这些(Solr和弹性搜索)都是建立在Lucene之上的,因此看起来,如果两者都有效的话,它应该在其中一个上工作,但也可以为弹性搜索提供一个答案。

示例返回

代码语言:javascript
复制
{
  "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在其奇怪的方式上非常恼人。事情就像你所期望的那样运作,而不必去挖掘怪癖。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-19 20:18:16

我将我的答案改编为solr 7.2.1示例:

启动solr by:./bin/solr start -e techproducts

我还可视化了google地图中的数据:https://www.google.com/maps/d/u/0/viewer?ll=42.00542239270033%2C-89.81213734375001&hl=en&hl=en&z=4&mid=16gaLvuWdE9TsnhcbK-BMu5DVYMzR9Vir

你需要这些查询参数

盒过滤器绑定的

  • fq={!bbox}

geo过滤器查询解析器bbox需要进一步的参数:

  • Solr字段: sfield=store
  • 指向搜索/排序: pt=36.35,-97.51
  • 过滤器距离: d=1200

排序:

  • sort=geodist() asc

全文查询:

  • q=some+text

对solr示例数据的完整示例查询:

Simple: http://localhost:8983/solr/techproducts/select?fq={!bbox}&sort=geodist()%20asc&sfield=store&pt=36.35,-97.51&d=1200&q=ipod&fl=name,store

UI: http://localhost:8983/solr/techproducts/browse?fq={!bbox}&sort=geodist()%20asc&sfield=store&pt=36.35,-97.51&d=1200&q=ipod

结果如预期:

  1. 苹果60 GB iPod
  2. 用于iPod的贝尔金电源线
  3. 按距离过滤: iPod & iPod迷你USB2.0电缆

提示

  • 字段存储必须是位置类型的:
  • 您可以Urlencode这些特殊字符:例如,fq=%7B%21bbox%20sfield%3DgeoLocation%7D
票数 2
EN

Stack Overflow用户

发布于 2020-03-25 18:43:03

在你的例子中,你必须把全文搜索评分和空间距离结合起来。

所以如果您的查询如下所示:

代码语言:javascript
复制
/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())

试试看,它应该有效,但当然需要一些调整。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48348312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档