gpt4 book ai didi

mysql - 在单个查询中连接多个 SphinxSE 表

转载 作者:行者123 更新时间:2023-11-29 09:02:01 26 4
gpt4 key购买 nike

我正在尝试编写一个查询,将 MySQL 中的一些表与两个 SphinxSE 表连接起来。它基本上是一个“每行有两个名称”类型的数据库,这两个名称都是链接到 SphinxSE 表的索引......我的目标是进行基本上“其中一个名称与该字符串匹配”的搜索在 sphinx ”。

我尝试使用的查询是:

SELECT * from names
LEFT JOIN name_1_se ON name_1_se.id=names.name_1_id
LEFT JOIN name_2_se ON name_2_se.id=names.name_2_id
WHERE name_1_se.query=('some random name;mode=phrase;limit=100000;maxmatches=100000')
OR name_2_se.query=('some random name;mode=phrase;limit=100000;maxmatches=100000')

(name_1_se 和 name_2_se 表是 SphinxSE 表)。

如果我在 where 中仅使用一次查找,则效果很好...添加第二个子句(任一子句)强制进行两次 SphinxSE“查找”,强制结果返回空。

我正在尝试做的事情是否可行,或者这是 SphinxSE 的已知问题吗?我在 Sphinx 网站上能找到的最接近的是这个错误 http://sphinxsearch.com/bugs/view.php?id=255从 2008 年开始。

谢谢!

最佳答案

不,这行不通。这是因为 sphinxSE/mysql 的“架构”。

Sphinx 当然不会向 mysql 提供真实的表。它假装它是一张 table 。它告诉 mysql 查询优化器通过索引工作得很好。因此,优化器应该始终“首先”选择 SphinxSE 表,然后将其与真正的 mysql 表连接。

因此,对于每一行,它都会在 SphinxSE 表上进行索引扫描,从而获取 doc_ids。然后它在原始表(连接本身)中查找它们。

SphinxSE 不能存在于连接的“右侧”。始终必须是第一个(或左边)。

...您的查询(使用左连接)强制 mysql 将 sphinxSE 表(好表也不少!)放在右侧,这根本不起作用。

<小时/>

您需要将查询改造成单个 sphinxSE 表。 sphinxSE 表可以一次搜索多个 sphinx 索引。或者可以修改您的实际索引以创建一次索引。

记住每个索引可以有多个字段 - 因此也许可以使用扩展查询

(@field1“一些随机名称”) | (@field2“一些随机名称”)

...结果一个 sphinxSE 表(在连接的左侧:))。

<小时/>

更新添加:

创建一个 sphinxSE 来同时搜索两个索引(如 sql UNION),你肯定可以做到

CREATE TABLE ... CONNECTION="sphinx://localhost:9312/index1,index2";

但即使你不能,在查询时覆盖它肯定会起作用,例如文档中的示例:

... WHERE query='test;index=test1,test2,test3;';

表中定义的索引将被忽略,因此可以使用任何sphinxSE表。

关于mysql - 在单个查询中连接多个 SphinxSE 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8317460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com