MySQL全文搜索多个表 - 另一个

时间:2015-11-06 17:35:26

标签: mysql

所以我查看了关于多个,即将成为联合表的MySQL全文搜索。我知道,现在,这是不可能的,因为无法在联合表上建立索引。给定的解决方案总是与“和/或”进行两次“匹配”,但它不能解决我的问题。

情况如下。我得到了:
- “作品”表,包含书名,简短描述和文本摘录 - “作者”表,带有作者姓名。

由于某些原因,我的搜索必须在BOOLEAN MODE中进行。此外,在搜索字段中输入的单词的默认行为是AND(我通过用+替换空格来预处理请求。)

用户通常会在搜索字段中输入:“NameOfAuthor TitleOfTheBook”或“NameOfAuthor aRandomWord(他在摘录中查找)”或“TitleOfTheBook”。他希望只找出与他输入的所有单词相匹配的结果(以及所有结果)。

所以如果我:
- 匹配“作品”字段或“作者”字段,只有“作品”表中的简短描述提及作者姓名时,我才会得到答案。
如果我不预处理查询(如果我不将“NameOfAuthor TitleOfTheBook”转换为“+ NameOfAuthor + TitleOfTheBook”),我将拥有一位作者的所有书籍以及包含查询的一些单词的所有书籍,不适合。

- 匹配“作品”字段和“作者”字段,我什么都没有。如果我不预处理“匹配作者匹配”部分的查询,它可能在这种情况下工作,但不是一般的,因为它不适用于任何未提及作者姓名的搜索。

在我看来,唯一的解决方案是混合工作字段和作者姓名的索引。但是不可能对联合做一个索引......这种情况似乎很典型,以至于我无法相信这是一个真正的问题。所以我可能很蠢,但我无法找到解决方案。任何的想法 ?我必须为此搜索创建特定的虚拟表吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

好吧,写下这个问题帮助我找到了一些东西......想法是将用户输入粉碎成$ wordsArray并对每一个进行全文搜索。

所以,这个想法是:

//Parse the words from the query field  
    for (there is still a $word to check in the $wordsArray) {  
       // do a fulltext search on "works" fields against $word OR "authors" fields against $word
       // save the results in a multi-dimensional $resultArray
    }

// Keep only the results that exists in every row of the $resultArray
// Display

我认为这很重,但是......但我能想象的唯一选择是用于搜索目的的数据库预生成表,并带有索引。这一切都取决于规模。

除非其他人有更好的解决方案!