【问题标题】:Is it possible to perfom a fulltext search against a joined column?是否可以对连接的列执行全文搜索?
【发布时间】:2010-08-22 20:10:22
【问题描述】:

您好,我正在尝试从加入的列中进行选择:

SELECT 
   A.idAd,
   A.ads_in_Cat,
   A.title,
   A.currency,
   A.price,
   A.in_dpt,
   A.description,
   D.*, 
   S.* 
FROM ads A
LEFT JOIN dept D ON D.id_dept = A.in_dpt
LEFT JOIN sub_cat_ad AS  ON S.id_sub_cat = A.ads_in_Cat
WHERE MATCH(A.title, A.description) AGAINST(:searchTerm) 
   OR MATCH (S.sub_cat_name) AGAINST(:searchTerm) 

有人可以告诉我为什么 MySQL 返回:1191 找不到与...中的列列表匹配的 FULLTEXT 索引,除非我使用 IN BOOLEAN MODE?

PS 表 S 为每个列定义了全文。 MySQL 5.1.49 版

【问题讨论】:

  • 我注意到您在 A.title 之后缺少一个逗号,但我怀疑这是问题的原因。
  • 是的,这将以完全不同的方式使查询崩溃。我编辑并添加了逗号。
  • 就此而言,您拥有WHERE MATCH(A.titlee, 而不是WHERE MATCH(A.title,。我认为这不是查询的直接复制和粘贴。如果可以的话,也许您应该将这个示例替换为真实示例的复制和粘贴?
  • 谢谢,是的,@Dan Breslau,这不是直接复制。
  • @Dan Breslau,我在布尔模式下使用时没有收到错误

标签: php sql mysql full-text-search


【解决方案1】:

你使用的时候还会报错吗:

   SELECT A.idAd,
          A.ads_in_Cat,
          A.title,
          A.currency,
          A.price,
          A.in_dpt,
          A.description,
          D.*, 
          s.* 
     FROM ads A
LEFT JOIN dept D ON D.id_dept = A.in_dpt
LEFT JOIN sub_cat_ad s ON s.id_sub_cat = A.ads_in_Cat
                      AND MATCH (s.sub_cat_name) AGAINST(:searchTerm) 
    WHERE MATCH(A.title, A.description) AGAINST(:searchTerm) 

【讨论】:

  • @jartaud:如果您根本不包括 sub_cat_ad 上的 FTS 怎么办?了解您正在测试的搜索词也很有帮助。
  • 小马是的,因为用户可以按标题、描述或只输入类别名称进行搜索
  • @jartaud:我明白你想要什么;我正在尝试诊断它是否是触发错误和要求使用IN BOOLEAN MODE 的特定字段。
  • 是的,如果我不在 sub_cat_ad 上包含 FTS,那么一切都很好。 Donno,但似乎 MySQL 5.1.49 忽略了定义的全文索引。
猜你喜欢
  • 1970-01-01
  • 2019-05-09
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
相关资源
最近更新 更多