AMB*_*AMB 12 php mysql sphinx sphinxql
我一直在使用mysql FTS,但最近切换到sphinx进行测试.
在centos 7上安装了sphinx
Linux production 3.10.0-123.8.1.el7.x86_64 #1 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
的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
}
Run Code Online (Sandbox Code Playgroud)
我正在使用php连接sphinxql并运行查询,像这样
$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";
Run Code Online (Sandbox Code Playgroud)
简单查询工作正常,即没有条件顺序的查询.但是当我试图运行具有order by的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
Run Code Online (Sandbox Code Playgroud)
另一次尝试,我用@field名称替换了字段名称
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'
Run Code Online (Sandbox Code Playgroud)
表格按标题,类别,upload_date,大小,已验证等字段排序
那么如何在我的sphinxql查询中使用order by
更新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
Run Code Online (Sandbox Code Playgroud)
您是否尝试过将该列用作 sql_attr_string ?
http://sphinxsearch.com/docs/current.html#conf-sql-attr-string
您至少需要版本 2.0.1 才能在此类属性上使用 ORDER BY 子句:
从 2.0.1-beta 开始,字符串属性可用于排序和分组(ORDER BY、GROUP BY、WITHIN GROUP ORDER BY)。