Sphinx查询-正确的查询方式
在我的应用程序中,我使用的是MySQL查询: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
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');