Sphinx查询-正确的查询方式

Sphinx查询-正确的查询方式,sphinx,Sphinx,在我的应用程序中,我使用的是MySQL查询: SELECT DISTINCT * FROM forum_topic \ LEFT JOIN forum_post ON forum_post.id_topic = forum_topic.Id \ WHERE MATCH (forum_post.content) AGAINST ('searching text') \ AND !MATCH (forum_topic.topic_name) A

在我的应用程序中,我使用的是MySQL查询:

SELECT DISTINCT * FROM forum_topic \
        LEFT JOIN forum_post ON forum_post.id_topic = forum_topic.Id \
            WHERE MATCH (forum_post.content) AGAINST ('searching text') \
        AND !MATCH (forum_topic.topic_name) AGAINST ('searching text') \
        GROUP BY forum_topic.Id
但现在我想迁移到斯芬克斯。我在DB中创建了配置文件和表sph_计数器。现在,我的配置如下所示:

source main
{
    type            = mysql
    sql_host        = localhost
    sql_user        = root
    sql_pass        =
    sql_db          = sphinx
    sql_port        = 3306  # optional, default is 3306
        sql_query_pre = SET NAMES utf8
        sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(Id) FROM forum_post
        sql_query = SELECT * FROM forum_topic LEFT JOIN forum_post ON forum_post.id_topic = forum_topic.Id \
            WHERE forum_post.Id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
            AND MATCH (forum_post.content) AGAINST ('searching text') \
            AND !MATCH (forum_topic.topic_name) AGAINST ('searching text')
            GROUP BY(forum_topic.Id)

    sql_attr_uint = id_topic
}

source delta : main
{
    sql_query_pre = SET NAMES utf8
    sql_query = SELECT * FROM forum_topic LEFT JOIN forum_post ON forum_post.id_topic = forum_topic.Id \
            WHERE forum_post.Id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
            AND MATCH (forum_post.content) AGAINST ('searching text') \
            AND !MATCH (forum_topic.topic_name) AGAINST ('searching text')
            GROUP BY(forum_topic.Id)
}

index main
{
    source = main
    path = /var/data/main_sphinx
    charset_type = utf-8
}
index delta : main
{
    source = delta
    path = /var/data/delta_sphinx
    charset_type = utf-8
}

这是我用狮身人面像搜索的正确方法吗?或者我是从PHP脚本中执行此操作的?

您没有将“查询”放在配置文件中。您希望sphinx索引包含所有文档。Sphinx运行查询、脱机和索引结果。然后,Sphinx将对其索引运行查询

所以你真的想要这样的东西

    sql_query = SELECT p.*,t.* FROM forum_post p INNER JOIN forum_topic p ON p.id_topic = t.Id \
        WHERE p.Id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
这样,您可以构建一个索引,然后对其运行任意查询

使用@content语法意味着只搜索包含查询的内容列,而不是搜索,然后从author中排除它

$cl->setMatchMode(SPH_MATCH_EXTENDED);
$res = $cl->Query('@content searching text','index');