gpt4 book ai didi

ruby-on-rails-3 - 将SQL与 Elasticsearch 结合使用

转载 作者:行者123 更新时间:2023-12-03 00:30:20 25 4
gpt4 key购买 nike

在当前设置下,我需要添加一些自定义SQL语句,以用Tire Gem限制某些数据。
我在Rails 3.2和Ruby 1.9.3中使用
在 list Controller 中,我具有以下内容:

@listings = Listing.search()
对于我的Listing.rb,我使用带有许多过滤器的搜索方法,例如:
def self.search(params={})
tire.search(load: true, page: params[:page], per_page: 50) do |search|
search.query { string params[:query], :default_operator => "AND" } if params[:query].present?
search.filter :range, posted_at: {lte: DateTime.now}
search.filter :term, "property.rooms_available" => params[:property_rooms_available] if params[:property_rooms_available].present?
search.filter :term, "property.user_state" => params[:property_user_state] if params[:property_user_state].present?

...
end
我需要做的是将此SQL语句添加到搜索方法中,以便按经度和纬度确定范围。 URL中的参数通过以下形式传递“坐标”
http://localhost:3000/listings?coords=51.0000,-01.0000 52.0000,-02.0000 
(在-01.0000和52.0000之间有一个空格。)
目前我有:
 sql = "SELECT title, properties.id, properties.lng,properties.lat from listings WHERE ST_Within(ST_GeometryFromText('POINT(' || lat || ' ' || lng || ')'),ST_GeometryFromText('POLYGON((#{coords}))'));"
我想过尝试通过类似这样的方法在 Controller 内对其进行范围划分吗?
def self.polyed(coords)
joins(:property).
where("ST_Within(ST_GeometryFromText('POINT(' || properties.lat || ' ' || properties.lng || ')'),ST_GeometryFromText('POLYGON((#{coords}))'))").
select("title, properties.id, properties.lng,properties.lat")
end
还有这个...
listings_controller.rb
def index
@listings = Listing.polyed(poly_coordinates).search()
end
它需要通过HTML和json格式以@listings的形式返回结果
http://localhost:3000/listings.json?
我已经在使用RABL自动生成json。
这可能吗?
提前谢谢了。
瑞安

最佳答案

一种可能性是在joins选项中传递选项where:load等。

但是,如果您想在Rails代码中过滤返回的结果,则更好的方法似乎是使用Tire仅加载记录ID(使用fields选项限制返回的字段),然后在SQL查询中使用它们。

关于ruby-on-rails-3 - 将SQL与 Elasticsearch 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13746417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com