【发布时间】:2014-06-26 13:44:39
【问题描述】:
我正在将搜索逻辑从使用基本模型范围和地理编码器 gem 迁移到使用 Thinking Sphinx。
除了地理搜索逻辑之外,我已经很好地迁移了所有逻辑。当我运行搜索时,我收到以下错误:
解析错误:Sphinx expr:语法错误,'纬度,经度附近的意外TOK_IDENT)
它尝试运行的查询是:
SELECT GEODIST(0.9037681385969557, 0.08613329012956664, latitude, longitude) AS geodist, * FROM
refinery_marketplaces_business_coreWHERE MATCH('consultants') ANDsphinx_deleted= 0 ORDER BYgeodistASC LIMIT 0, 2
以下是相关摘录:
索引定义:
has 'RADIANS(latitude)', :as => :latitude, :type => :float
has 'RADIANS(longitude)', :as => :longitude, :type => :float
group_by 'latitude', 'longitude' # Needed for PostgreSQL
控制器:
@businesses = Business.search params[:keywords], :geo => [0.9037681385969557, 0.08613329012956664], :order => "geodist ASC"
我可以在这里找到的唯一两个类似的帖子是:
这两者基本上都是人们在错误的模型上调用搜索的结果 - 我在正确的模型上调用它。
以下是所有游戏的版本:
- Ruby 2.0.0p247
- Rails 3.2.14
- 思考狮身人面像 3.1.1
- Sphinx 2.1.4(已安装 brew)
- Postgres 9.3.2(已安装 brew)
更新:
我发现您可以在阅读这篇文章后将 SphinxQL 查询输入到 Sphinx CLI:Connect to SphinxQL through Linux command-line
mysql -P9306 --protocol=tcp --prompt='sphinxQL> '
运行后的一些观察:
- 删除 GEODIST() 引用查询返回正常
- 运行简单的 SELECT * 查询显示纬度和经度不在索引中
- 在 psql 中运行
\d+ refinery_marketplaces_businesses显示它们是表上的字段:- 纬度 |双精度
- 经度 |双精度
- 这两个字段都包含在
rake ts:rebuild生成的 sql_query 中,但它们不会显示在生成的索引中。
非常感谢任何帮助!
谢谢
【问题讨论】:
标签: ruby-on-rails sphinx thinking-sphinx