Sphinxql – 在PHP中使用Sphinxql时如何使用具有顺序的查询,而不使用sphinxapi.php

前端之家收集整理的这篇文章主要介绍了Sphinxql – 在PHP中使用Sphinxql时如何使用具有顺序的查询,而不使用sphinxapi.php前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在使用 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 

}

我正在使用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";

简单的查询工作正常,即没有按条件排序的查询.
但是当我试图运行具有顺序的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

另一个尝试,我用@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'

表格按照标题,类别,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).

猜你在找的PHP相关文章