MySQL 使用跨相邻记录的词距离搜索
MySQL search with word distance across neighboring records
我正在 MySQL 数据库中的静态记录中执行关键字文本搜索。是否可以构造一个查询来查找记录中的第一个关键字和相邻记录中的第二个关键字?考虑以下样本数据。
------------------------------------------------------
| id | textstrings |
------------------------------------------------------
| 1 | Every good boy does fine. |
| 2 | The quick brown fox jumped over the lazy dog. |
| 3 | I will not eat green eggs and ham. |
| 4 | There is no time like the present. |
| 5 | Envy is an ugly shade of green. |
------------------------------------------------------
搜索字词 green brown
应该 return 记录 2 和 3,因为它们是相邻记录,但不应包含记录 5,因为它不是记录 3 的相邻记录。
我知道我可以对其中一个词执行查询并通过处理结果集来完成此操作,但我想知道是否可以将其构建到查询中。
该字段确实有全文索引。
您可以将两个查询连接在一起,一个将搜索包含第一个搜索字符串的 ID(本例中为 green
),另一个将搜索包含第二个搜索字符串(brown
这里).
SELECT
语句的结构是删除重复的相邻 id
对,这可能是 WHERE
子句的结果。
SELECT LEAST(t1.id, t2.id) AS id1, GREATEST(t1.id, t2.id) AS id2
FROM
(
SELECT id
FROM table
WHERE textstrings LIKE '%green%'
) t1
INNER JOIN
(
SELECT id
FROM table
WHERE textstrings LIKE '%brown%'
) t2
ON t1.id = t2.id - 1 OR t1.id = t2.id + 1
GROUP BY LEAST(t1.id, t2.id), GREATEST(t1.id, t2.id)
单击下面的 link 以获得 运行 演示。
我正在 MySQL 数据库中的静态记录中执行关键字文本搜索。是否可以构造一个查询来查找记录中的第一个关键字和相邻记录中的第二个关键字?考虑以下样本数据。
------------------------------------------------------
| id | textstrings |
------------------------------------------------------
| 1 | Every good boy does fine. |
| 2 | The quick brown fox jumped over the lazy dog. |
| 3 | I will not eat green eggs and ham. |
| 4 | There is no time like the present. |
| 5 | Envy is an ugly shade of green. |
------------------------------------------------------
搜索字词 green brown
应该 return 记录 2 和 3,因为它们是相邻记录,但不应包含记录 5,因为它不是记录 3 的相邻记录。
我知道我可以对其中一个词执行查询并通过处理结果集来完成此操作,但我想知道是否可以将其构建到查询中。
该字段确实有全文索引。
您可以将两个查询连接在一起,一个将搜索包含第一个搜索字符串的 ID(本例中为 green
),另一个将搜索包含第二个搜索字符串(brown
这里).
SELECT
语句的结构是删除重复的相邻 id
对,这可能是 WHERE
子句的结果。
SELECT LEAST(t1.id, t2.id) AS id1, GREATEST(t1.id, t2.id) AS id2
FROM
(
SELECT id
FROM table
WHERE textstrings LIKE '%green%'
) t1
INNER JOIN
(
SELECT id
FROM table
WHERE textstrings LIKE '%brown%'
) t2
ON t1.id = t2.id - 1 OR t1.id = t2.id + 1
GROUP BY LEAST(t1.id, t2.id), GREATEST(t1.id, t2.id)
单击下面的 link 以获得 运行 演示。