Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Sphinx查询中的意外TOK_标识_Ruby On Rails_Sphinx_Thinking Sphinx - Fatal编程技术网

Ruby on rails Sphinx查询中的意外TOK_标识

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

我正在将搜索逻辑从使用基本模型范围和geocoder gem迁移到使用Thinking Sphinx

除了地理搜索逻辑之外,我已经很好地迁移了所有逻辑。运行搜索时,出现以下错误:

分析错误:Sphinx表达式:语法错误,在“纬度,经度”附近出现意外的TOK_标识符)

它试图运行的查询是:

选择GEODIST(0.903768138596957,0.08613329012956664,纬度,经度)作为GEODIST,*来自
炼油厂、市场、商业、核心
匹配(“顾问”)和
斯芬克斯被删除
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,手动删除配置文件和索引,然后从头开始重建