2017-03-17 110 views
0

我已經設置了思維獅身人面像的實時索引,它的工作非常好,並與地理主義搜索以及。但現在我想搜索多邊形內的記錄。使用思維獅身人面像在獅身人面像中搜索多邊形

獅身人面像文檔解釋了它很好的Geo-distance searching

現在我想用用思維獅身人面像這一功能。 思維獅身人面像確實解釋了關於geodist搜索Here 但它沒有說明如何在多邊形內進行搜索。

任何人都可以幫助我這麼做嗎?

回答

1

思維獅身人面像沒有內置任何東西來爲多邊形搜索提供一個整潔的界面,但它當然可以使用該功能。

您會希望生成您願意的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)是一個很好的參考。

+0

謝謝帕特,我真的很感謝你爲使TS成爲更好的平臺而付出的努力。 我已經閱讀了關於中間件的博文。我仔細檢查了源代碼,發現沒有像geodist這樣的直接使用多邊形的方法。因此,使用上述方法使其暫時工作。 –

+0

我也想知道如上所述的動態屬性。所以我的兩個查詢都解決了。作爲一個建議,我認爲你可以提到上述方法,在思考sphinx的文檔部分使用動態屬性和基於多邊形的搜索。 我有種閱讀整個文檔找到它,但無法找到它。 再次感謝您的幫助 –