使用Thinking Sphinx在sphinx中搜索多边形

时间:2017-03-17 08:01:20

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

我已经设置了思科sphinx用于实时索引,并且它工作得非常好并且也使用geodist进行搜索。但是现在我想在多边形内搜索记录。

Sphinx文档在Geo-distance searching

解释得非常好

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

任何人都可以帮我这么做吗?

1 个答案:

答案 0 :(得分:1)

思考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)是一个好的参考。