首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >狮身人面像查询中的意外TOK_IDENT

狮身人面像查询中的意外TOK_IDENT
EN

Stack Overflow用户
提问于 2014-06-26 13:44:39
回答 1查看 1.1K关注 0票数 1

我正在将搜索逻辑从使用基本模型作用域和geocoder迁移到使用Thinking Sphinx。

我已经很好地迁移了所有的逻辑,除了地学逻辑。当我运行搜索时,会得到以下错误:

解析错误: Sphinx :语法错误,在“纬度、经度”附近意外的TOK_IDENT )

它试图运行的查询是:

选择GEODIST(0.9037681385969557,0.08613329012956664,纬度,经度)作为大地测量学,*来自refinery_marketplaces_business_core WHERE (“顾问”),sphinx_deleted = 0,geodist ASC限值0,20;

以下是相关的摘录:

索引定义:

代码语言:javascript
复制
has 'RADIANS(latitude)', :as => :latitude,  :type => :float
has 'RADIANS(longitude)', :as => :longitude, :type => :float
group_by 'latitude', 'longitude' # Needed for PostgreSQL

控制器:

代码语言:javascript
复制
@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之后,我发现您可以在SphinxQL中输入Connect to SphinxQL through Linux command-line查询。

代码语言:javascript
复制
mysql -P9306 --protocol=tcp --prompt='sphinxQL> '

运行以下操作后的几个观察结果:

  • 删除GEODIST()引用查询返回很好
  • 运行一个简单的SELECT *查询显示索引中没有纬度和经度
  • 在psql中运行\d+ refinery_marketplaces_businesses显示它们是表中的字段:
    • 纬度倍精度
    • 经度双精度

  • 这两个字段都包含在由sql_query生成的rake ts:rebuild中,但它们没有显示在生成的索引中。

任何帮助都非常感谢!

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-27 11:09:59

我设法对此进行排序,包括其他遇到此错误消息的人的答案。

错误:unexpected TOK_IDENT基本上意味着索引中不存在查询中引用的字段。

验证索引中的内容的最佳方法是使用以下方法运行Sphinx:

代码语言:javascript
复制
mysql -P9306 --protocol=tcp --prompt='sphinxQL> '

并运行SELECT *查询,如下所示:

代码语言:javascript
复制
SELECT * FROM your_index_core WHERE sphinx_deleted = 0 LIMIT 0, 20;

从这里可以看到顶部索引中的字段。

我不知道为什么索引中不存在它们--我多次运行rake ts:rebuild,但都没有效果。最后,我不得不停止searchd,手动删除配置文件和索引,然后从头开始重建。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24432222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档