【发布时间】:2016-11-22 23:53:37
【问题描述】:
现在首先我已经用 sphinx 进行了几天的实验,所以我是 sphinx 的新手。
我集成了 sphinx 搜索(普通),它工作正常。 但直到最近我才发现 RT 是一个更好的选择。
PLAIN OL' 斯芬克斯
source people
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass =
sql_db = test
sql_port = 3306 # optional, default is 3306
sql_query = SELECT id, name FROM people
sql_field_string = name
sql_query_info = SELECT * FROM people WHERE id=$id
}
index people
{
source = people
...
}
searchd
{
listen = 9312 # Port to listen on
....
}
RT 狮身人面像
index people
{
type = rt
rt_field = name
...
}
searchd
{
listen = 9312 # Port to listen
listen = 9306:mysql41
workers = threads
...
}
现在,如果我查询类似(我正在使用 PHP 和 This Sphinx API (GitHub) )这...
require_once('sphinxapi.php');
$cl = new SphinxClient();
$cl->SetServer( "localhost", 9312 );
$cl->SetMatchMode( SPH_MATCH_EXTENDED );
$qq = "Mike";
$result = $cl->Query('@name "'.$qq.'"','people');
var_dump($result);
- In Plain-Ol' - 我得到 5 个点击(因为我有 5 个叫 Mike_xxx 的人)(它的工作)
- 在 RT 中 - 我得到 0 个点击(不工作)
P.S - 创建 RT index 后,我使用 phpmyadmin 在我的 mysql 中插入了一些人的名字。但是 RT 索引仍然有 0 Hits。
更新 2
在@barryhunter 的指导下,我想利用ATTACH,因为我不想分别为 MySQL 和 SphinxQL 执行两次查询(插入、更新、删除)。
经过一番研究,我发现了这个Ivinco Blog post,并将我的.conf 修改为这个
新的 RT Sphinx 会议
source people
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass =
sql_db = test
sql_port = 3306 # optional, default is 3306
sql_query = SELECT id, name FROM people
sql_field_string = name
sql_query_info = SELECT * FROM people WHERE id=$id
}
index people
{
source = people
...
}
index people_rt
{
type = rt
rt_field = name
...
}
source people_attach
{
...
sql_query = select 1 from people_rt
sql_query_post = ATTACH INDEX people TO RTINDEX people_rt
}
index people_attach
{
source = people_attach
}
searchd
{
listen = 9312 # Port to listen
listen = 9306:mysql41
workers = threads
...
}
现在我在终端(Ubuntu)中运行这些命令
P.S - 所有以前的索引,pids都被删除了。
sudo indexer -c /path/to/xxx.conf people
sudo indexer -c /path/to/xxx.conf people_attach
#ERROR: index 'people_attach': sql_query: No database selected (DSN=mysql://root:***@localhost:9306/)
sudo searchd
#WARNING: index 'people_attach': preload: failed to open /var/lib/sphinxsearch/data/people_attach.sph: No such file or directory; NOT SERVING
现在我为 Mike 获得了 5 次点击。但是如果我在 mysql 中插入/更新任何东西(使用 PHPMyAdmin/PHP 脚本)RT 不会更新?
这不是attach的主要目的吗?
【问题讨论】:
-
您似乎已经定义了 RT 索引。但是您是否确实向其中添加了任何数据? (例如通过 INSERT,甚至 ATTACH ?)
-
(插入RT索引,不插入数据库,RT索引与数据库无关)
-
没有 Havent 在 RT 索引中插入任何内容。 @barryhunter。如果 RT 索引没有连接到数据库,那么我必须插入两次数据吗?一次在 DB(MySQL) 和一次在 Sphinx 中?如果是,那么由于我使用的是 PHP 我会做
mysqli_query($con,"INSERT INTO ....");如何使用 PHP 插入 RT 索引? -
@barryhunter 说我必须在我刚刚使用 PHP 创建的 sphinx RT 索引中插入
id = 10,name = 'MIKE_445'我该怎么做?
标签: php mysql sql indexing sphinx