MYSQL-在多种条件下进行的高级全文搜索

时间:2019-09-15 15:34:02

标签: mysql full-text-search multiple-columns multiple-conditions

我只是花了几天的时间来寻找解决方案,但没有成功,所以请帮助我! :)

我正在尝试为书籍编写一个简单的(小型)搜索引擎。记录数量不会很大(每年600条新记录)-因此,一流的性能并不是“必须具备的”条件。

books_searchindex;
+----------------+---------------------+------+-----+---------+-------+
| Field          | Type                | Null | Key | Default | Extra |
+----------------+---------------------+------+-----+---------+-------+
| book_id        | bigint(20) unsigned | NO   | PRI | NULL    |       |
| category       | tinyint(3) unsigned | NO   | PRI | NULL    |       |
| search         | text                | YES  | MUL | NULL    |       |
+----------------+---------------------+------+-----+---------+-------+

搜索过程分为两个步骤。第一步是在特殊表上使用全文搜索,在这里我以简化形式(从html等中清除)聚合所有文本数据。该表还有一个名为“类别”的附加列-告知其表示的数据类型(例如1-标题,2-作者,3-关键字,4-摘要)以及相应书籍的ID。这意味着一本书在此表中有4行,每个类别一行。

第二步使用已过滤的book_ids作为where_in,并添加数字搜索年份,月份等,并连接其他表。该查询的结果将呈现给最终用户。

我设法进行了全文搜索,但这并不是我要找的东西。目前,如果我在“作者”字段中写“ Smith”,它还会搜索其他类别,例如标题,摘要,关键字。

SELECT book_id, SUM(MATCH(search) AGAINST("XYZ")) as score
FROM `books_searchindex`
WHERE MATCH(search) AGAINST("XYZ")
AND `category` = 1
GROUP BY `book_id`
UNION
(...)

为了消除错误数据,我将查询分为较小的查询和附加的类别位置,然后将所有结果与UNION结合使用。几乎可以,但是我想获取所有全文搜索同时发生的数据。如果我以作者的身份写“ Wachowski”,以标题写“ Revolutions”,以摘要写“ Neo”,那么我只想得到1个结果Matrix Revolitions,而不是Wachowski的全部三部曲或所有电影。

你能帮我吗?:)

ps。我知道,我知道...最后一个例子是电影,而不是书;)

0 个答案:

没有答案