我一直在使用
mysql FTS,但最近切换到sphinx进行测试.
在centos 7上安装狮身人面像
Linux production 3.10.0-123.8.1.el7.x86_64 #1 GNU/Linux
的sphinx.conf
source content_src1 { type = MysqL sql_host = localhost sql_user = sql_pass = sql_db = t_prod2 sql_port = 3306 # optional,default is 3306 sql_query = \ SELECT content.record_num,\ content.title,\ content.category,\ content.upload_date,\ content.comments_count,\ content.verified,\ content.uploader,\ content.size \ FROM content WHERE enabled = 1 sql_attr_uint = record_num sql_attr_string = title } index content_index1 { source = content_src1 path = /var/lib/sphinx/content_index1 morphology = stem_en min_word_len = 1 min_prefix_len = 0 min_infix_len = 1 docinfo = extern }
$sphinxql = @MysqLi_connect($sphinxql_host.':'.$sphinxql_port,'',''); $sphinxql_query = "SELECT id FROM $sphinx_index WHERE MATCH('".MysqLi_real_escape_string($prod1,$q)."') LIMIT $from,$max_results";
简单的查询工作正常,即没有按条件排序的查询.
但是当我试图运行具有顺序的SQL查询时,sphinx会抛出错误.
SELECT id FROM $sphinx_index WHERE MATCH('".MysqLi_real_escape_string($prod1,$q)."') ORDER BY title DESC LIMIT $from,$max_results index content_index1: sort-by attribute 'title' not found
SELECT id FROM $sphinx_index WHERE MATCH('".MysqLi_real_escape_string($prod1,$q)."') ORDER BY @title DESC LIMIT $from,$max_results sphinxql: Syntax error,unexpected USERVAR,expecting IDENT (or 55 other tokens) near '@title DESC LIMIT 0,25'
表格按照标题,类别,upload_date,大小,验证等字段排序
那么我怎么可以在我的sphinxql查询中使用顺序
更新1
我已经设法运行查询“没有顺序”,但是具有“order by”的查询不能正常工作,没有给出错误,给出结果集,但是如果我改变按属性排序的方向,结果集不会改变.
更新的字段和属性如下.
sql_field_string = title sql_field_string = og_name sql_field_string = hash sql_field_string = keywords sql_attr_timestamp = upload_date_timestamp sql_attr_uint = category sql_attr_uint = comments_count sql_attr_bool = verified sql_attr_bigint = size
你试过使用该列作为sql_attr_string吗?
http://sphinxsearch.com/docs/current.html#conf-sql-attr-string
您至少需要版本2.0.1才能在此类属性上使用ORDER BY子句:
Starting from 2.0.1-beta string attributes can be used for sorting and grouping(ORDER BY,GROUP BY,WITHIN GROUP ORDER BY).