Sphinx3中test1索引无法SQL查询及RT表使用问题
问题解答
一、test1索引无法通过SQL查询的原因
- 索引版本不兼容导致searchd未加载该索引:Sphinx 3.1.1的searchd要求索引文件版本为v48,但你用Sphinx2.1.5生成的test1索引是v38,版本不匹配时searchd会直接禁用加载该索引。SQL接口(9306端口)只能访问searchd已加载的索引,所以自然查不到test1。
- 命令行search与searchd的运行机制不同:命令行
search工具是直接读取磁盘上的索引文件,对旧版本索引有一定向下兼容能力;但searchd是把索引加载到服务进程中运行,为了稳定性严格要求索引版本与服务版本一致,不加载不兼容的索引就无法通过SQL访问。
二、通过SQL使用RT表testrt的方法
RT表(实时表)本身就是为Sphinx的SQL接口设计的,操作和常规SQL表类似,常见操作如下:
- 插入/更新数据:使用
REPLACE(存在则更新,不存在则插入)或INSERT语句REPLACE INTO testrt(id, title, content) VALUES(1, '示例标题', '这是测试内容'); - 全文检索查询:用
SELECT结合MATCH()函数执行全文搜索SELECT id, title, weight() FROM testrt WHERE MATCH('测试关键词'); - 删除数据:根据id或条件删除
DELETE FROM testrt WHERE id=1; - 查看表结构:
DESCRIBE testrt; - 创建自定义RT表(如果需要):
CREATE TABLE custom_rt( id INTEGER PRIMARY KEY, category_id INTEGER, content TEXT ) ENGINE=SPHINX;
额外建议:修复test1索引的可访问性
要让test1能通过SQL查询,必须用Sphinx3.1.1版本的indexer工具重新生成索引,替换旧的v38索引文件,然后重启searchd服务,此时searchd会正常加载兼容版本的索引,SQL接口就能访问test1了。
内容的提问来源于stack exchange,提问作者Илья Коновалов
相关产品推荐
相关产品推荐

