我正在将搜索逻辑从使用基本模型作用域和geocoder迁移到使用Thinking Sphinx。
我已经很好地迁移了所有的逻辑,除了地学逻辑。当我运行搜索时,会得到以下错误:
解析错误: Sphinx :语法错误,在“纬度、经度”附近意外的TOK_IDENT )
它试图运行的查询是:
选择GEODIST(0.9037681385969557,0.08613329012956664,纬度,经度)作为大地测量学,*来自
refinery_marketplaces_business_coreWHERE (“顾问”),sphinx_deleted= 0,geodistASC限值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"我在这里唯一能找到的两篇类似的文章是:
这两种情况基本上都是人们调用搜索错误模型的结果--我将其称为正确的模型。
下面是游戏中所有内容的版本:
更新:
在阅读完本文: SphinxQL之后,我发现您可以在SphinxQL中输入Connect to SphinxQL through Linux command-line查询。
mysql -P9306 --protocol=tcp --prompt='sphinxQL> '运行以下操作后的几个观察结果:
\d+ refinery_marketplaces_businesses显示它们是表中的字段:
rake ts:rebuild中,但它们没有显示在生成的索引中。任何帮助都非常感谢!
谢谢
发布于 2014-06-27 11:09:59
我设法对此进行排序,包括其他遇到此错误消息的人的答案。
错误:unexpected TOK_IDENT基本上意味着索引中不存在查询中引用的字段。
验证索引中的内容的最佳方法是使用以下方法运行Sphinx:
mysql -P9306 --protocol=tcp --prompt='sphinxQL> '并运行SELECT *查询,如下所示:
SELECT * FROM your_index_core WHERE sphinx_deleted = 0 LIMIT 0, 20;从这里可以看到顶部索引中的字段。
我不知道为什么索引中不存在它们--我多次运行rake ts:rebuild,但都没有效果。最后,我不得不停止searchd,手动删除配置文件和索引,然后从头开始重建。
https://stackoverflow.com/questions/24432222
复制相似问题