我有如下语句
select count(*) from search where match(tissue,disease,cell_line,other_name) against ('+breast+cancer' IN BOOLEAN MODE) ;
返回726行数据
但是将语句改为
select count(*) from search where match(disease) against ('+breast+cancer' IN BOOLEAN MODE) ;
返回变为94
后面查了下第一个语句disease字段里包含Breast_cancer_high-risk_for_distant_metastasis,但是在第二个语句的disease字段中只有Breast cancer
不知道语句哪里有问题啊?
根据你提供的信息,可以得出以下结论:
第一个语句中使用了多列进行全文索引,包括tissue、disease、cell_line和other_name。而第二个语句中只使用了disease列进行全文索引。如果某个搜索词在其他列中出现的频率比在disease列中更高,那么第一个语句返回的结果会更多。
在第一个语句中,搜索词"+breast+cancer"在多列中出现的频率更高,因此返回的结果更多。而在第二个语句中,只有disease列中包含该搜索词,因此返回的结果较少。
在第一个语句中,如果搜索的短语中含有特殊字符或数字,需要使用双引号将其括起来。例如,如果搜索的短语是"+breast+cancer+1",则应该写成""+breast+cancer+1""。
综上所述,你的语句没有问题,返回结果的差异是由于多列索引与单列索引以及搜索词频率不同造成的。