MySQL 5.7.9在WAMP上使用Sphinx在多个表中进行全文研究

时间:2016-05-25 00:39:16

标签: php mysql sphinx

我必须在多个MySQL表中进行实习研究。 事实上,我这样做是为了一个网络电话目录。我有一个表单文本输入来进入研究。 我尝试使用MATCH / AGAINST语法,但似乎是错误的。 我的查询实际上就是那个:

SELECT U_ID, 'users'
from users  
where match ([columns that I want to search in]) AGAINST ([The text inside my search field])

UNION

SELECT S_ID, 'service'
from service 
where match ([columns that I want to search in]) AGAINST ([The text inside my search field])

这个问题如下:对于这种类型的搜索,我必须在许多MATCH中发送变量,因此我不能得到相关结果(因为多个反对元素)。完美的解决方案可能是取代'UNION'通过' INTER'但这太容易了。 我不知道它是否有用,但我使用PDO通过PhP发送我的查询

我试图搜索解决方案,但我无法找到一个:

https://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html
Using Full-Text Search in SQL Server 2008 across multiple tables, columns
MySQL fulltext search on multiple tables with different fields

然后我尝试使用Sphinx,但文档对我来说很复杂,我无法理解(http://sphinxsearch.com/docs/current.html)。

有人可以帮我找到我需要的查询,还是可以在Windows上给我一个非常清晰简单的Sphinx教程链接(我已经阅读过IBM的那篇)?

编辑:

我想用集合论(inter mean intersection)来说明我的问题。 例如,当我输入"约翰会计部门"在我的表单输入中,我想显示名为John的所有用户,但仅限于他们属于会计部门。 通过我的实际搜索,我将获得所有部门的ID:" John"或"会计"或"部门"以及所有名为" John"或会计"或部门"。 这是我的实际问题。

1 个答案:

答案 0 :(得分:0)

我认为 物化视图 是在MySQL中解决此问题的最简单方法。

它们不是严格的mysql功能(即mysql无法自动维护视图,它不是真正的视图)它是一个普通的表,恰好是其他表的副本数据。

实际上可以很容易地创建......

CREATE TABLE my_search_view (fulltext(U_Name,S_Name)) 
    SELECT U_ID, U_Name, S_ID, S_Name
    FROM user
    INNER JOIN service USING (S_ID);

(如果您更新源表,只需删除该表,然后重新创建它!虽然如果想要一个更动态的解决方案可以使用触发器,但根据数据大小可能不值得付出努力)

现在你可以对这个表运行一个简单的查询(它有一个全文索引)

SELECT *
FROM my_search_view
WHERE MATCH (U_Name,S_Name) AGAINST ('John accounting department')