【问题标题】:MYSQL Full text search with subqueryMYSQL 带子查询的全文搜索
【发布时间】:2021-01-12 06:49:24
【问题描述】:

我想使用 SELECT Query 的单个结果进行全文搜索。

这是示例选择查询:

SELECT GROUP_CONCAT(CONCAT(meaning) SEPARATOR ' ') as translation 
FROM knowledge_management.tbl_word_meaning 
WHERE word = 'Bet' and locale = 'en'

这是我的最终查询,它将 SELECT 查询的结果作为搜索文本。

SELECT * 
FROM knowledge_management.tbl_article 
WHERE MATCH(name) AGAINST ((
    SELECT GROUP_CONCAT(CONCAT(meaning) SEPARATOR ' ') as translation 
    FROM knowledge_management.tbl_word_meaning 
    WHERE word = 'Bet' and locale = 'en'
    ) IN NATURAL LANGUAGE MODE)

现在我想在全文搜索中使用该结果,但结果并不理想。

添加硬编码文本时工作正常''

【问题讨论】:

  • 如果你这样做MATCH(name) AGAINST ('Wager Stake Punt' IN NATURAL LANGUAGE MODE)会得到预期的结果吗?
  • @Barmar 是的,它通过硬编码的“Wager Stake Punt”给出了预期的结果

标签: mysql full-text-search


【解决方案1】:

测试

SELECT a.* 
FROM knowledge_management.tbl_article a
CROSS JOIN ( SELECT GROUP_CONCAT(CONCAT(meaning) SEPARATOR ' ') as translation 
             FROM knowledge_management.tbl_word_meaning 
             WHERE word = 'Bet' and locale = 'en' ) b
WHERE MATCH(a.name) AGAINST (b.translation IN NATURAL LANGUAGE MODE)

更新

SQL 错误 [1210] [HY000]: AGAINST – str028 的参数不正确

确实如此 (MATCH() function):

搜索字符串必须是在查询评估期间保持不变的字符串值。例如,这会排除表格列,因为每行的列可能不同。

如果是这样,那么动态 SQL 似乎是唯一的选择。

Modelling DEMO

【讨论】:

  • 它给出了一个错误。反对的参数不正确我认为当我们从其他表交叉连接时,b.translation 变成了多个值
  • SQL 错误 [1210] [HY000]: AGAINST 的参数不正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多