Ruby on rails Sphinx查询中的意外TOK_标识
我正在将搜索逻辑从使用基本模型范围和geocoder gem迁移到使用Thinking Sphinx 除了地理搜索逻辑之外,我已经很好地迁移了所有逻辑。运行搜索时,出现以下错误: 分析错误:Sphinx表达式:语法错误,在“纬度,经度”附近出现意外的TOK_标识符) 它试图运行的查询是: 选择GEODIST(0.903768138596957,0.08613329012956664,纬度,经度)作为GEODIST,*来自Ruby on rails Sphinx查询中的意外TOK_标识,ruby-on-rails,sphinx,thinking-sphinx,Ruby On Rails,Sphinx,Thinking Sphinx,我正在将搜索逻辑从使用基本模型范围和geocoder gem迁移到使用Thinking Sphinx 除了地理搜索逻辑之外,我已经很好地迁移了所有逻辑。运行搜索时,出现以下错误: 分析错误:Sphinx表达式:语法错误,在“纬度,经度”附近出现意外的TOK_标识符) 它试图运行的查询是: 选择GEODIST(0.903768138596957,0.08613329012956664,纬度,经度)作为GEODIST,*来自炼油厂、市场、商业、核心匹配(“顾问”)和斯芬克斯被删除GEODISTASC
炼油厂、市场、商业、核心匹配(“顾问”)和斯芬克斯被删除GEODIST
ASC限制0,20
以下是相关摘录:
索引定义:
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"
控制器:
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
- 轨道3.2.14
- 斯芬克斯思考3.1.1
- Sphinx 2.1.4(已安装brew)
- Postgres 9.3.2(已安装brew)
更新:
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"
在阅读本文后,我发现您可以在Sphinx CLI中输入SphinxQL查询:
运行此操作后的几个观察结果:
- 删除GEODIST()引用时,查询返回的结果很好
- 运行简单的SELECT*查询显示纬度和经度不在索引中
- 在psql中运行
\d+炼油厂\市场\企业
,显示它们是表中的字段:
- 纬度|双精度
- 经度|双精度
- 这两个字段都包含在由
rake ts:rebuild
生成的sql\u查询中,但它们不会显示在生成的索引中
非常感谢您的帮助
谢谢我成功地对其进行了排序,以便为遇到此错误消息的任何其他人提供答案
错误:unexpected TOK_IDENT
基本上意味着查询中引用的字段在索引中不存在
验证索引中内容的最佳方法是使用以下命令运行Sphinx CLI:
mysql -P9306 --protocol=tcp --prompt='sphinxQL> '
然后运行SELECT*查询,如:
SELECT * FROM your_index_core WHERE sphinx_deleted = 0 LIMIT 0, 20;
从这里可以看到顶部索引中的字段
我不明白为什么索引中不存在它们——我已经多次运行了rake ts:rebuild
,但都无济于事。最后,我不得不停止searchd,手动删除配置文件和索引,然后从头开始重建