【问题标题】:Searching in polygons in sphinx using Thinking Sphinx使用 Thinking Sphinx 在 sphinx 中搜索多边形
【发布时间】:2017-03-17 08:01:19
【问题描述】:

我已经为实时索引设置了思维狮身人面像,它工作得很好,也可以使用 geodist 进行搜索。但现在我想搜索多边形内的记录。

Sphinx 文档在 Geo-distance searching 上很好地解释了它

现在我想通过思考狮身人面像来使用这个功能。 Thinking sphinx 确实解释了 geodist 搜索 Here 但它没有说明如何在多边形内搜索。

谁能帮我做这件事?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-5 sphinx thinking-sphinx


    【解决方案1】:

    Thinking Sphinx 没有内置任何东西来为多边形搜索提供简洁的界面,但肯定可以使用该功能。

    您需要生成您想要的 SphinxQL SELECT 子句,对其进行相应过滤,和/或您可以使用 AttributesPane 访问您的自定义属性。以下代码希望清晰:

    search = Model.search("foo",
      :select => "*, CONTAINS(GEOPOLY2D(...), ...) AS inside",
      :with   => {:inside => true}
    ); ""
    search.context[:panes] << ThinkingSphinx::Panes::AttributesPane
    search.collect { |instance| instance.sphinx_attributes["inside"] }
    

    第一个语句末尾的; "" 仅在 IRB 或 Rails 控制台中运行时才需要 - 您希望避免以评估结果的方式调用search,直到您将窗格添加到. 搜索结果通常是延迟加载的,但 IRB 调用inspect 打印语句结果,消除了延迟的优势。

    窗格在a blog post I wrote 中讨论,AttributesPane 类的源代码非常简单。您可能还想编写一个自定义中间件类,该类使用您自己的选项并将它们转换为多边形函数 - Geographer 类(将 :geo 转换为 GEODIST)是一个很好的参考。

    【讨论】:

    • 感谢 Pat,我非常感谢您为使 TS 成为更好的平台所做的努力。我已经阅读了有关中间件的博客文章。我浏览了源代码,没有直接的方法来使用像geodist这样的多边形所以使用上面提到的方法让它暂时工作。
    • 我也想知道你上面提到的动态属性。所以我的两个问题都解决了。作为一个建议,我认为您可以在 Think sphinx 的文档部分提及上述使用动态属性和基于多边形的搜索的方法。我有点阅读整个文档以找到它,但找不到它。再次感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多