如何在MySQL中进行反向全文搜索?

如何在MySQL中进行反向全文搜索?,mysql,full-text-search,Mysql,Full Text Search,默认情况下是这样的: select * from main_table where match(col1,col2) against('search_item'); 但我想拿的是相反的 比如说,我已经恢复了所有搜索项(例如1000条记录) 我想看看它们中的哪一个匹配main_表中的指定行 这可行吗?你可以做如下事情: SELECT * FROM search_items WHERE (SELECT col1 FROM main_table WHERE ID = XXX) LIKE CONCAT

默认情况下是这样的:

select * from main_table where match(col1,col2) against('search_item');
但我想拿的是相反的

比如说,我已经恢复了所有搜索项(例如1000条记录)

我想看看它们中的哪一个匹配main_表中的指定行


这可行吗?

你可以做如下事情:

SELECT * FROM search_items WHERE (SELECT col1 FROM main_table WHERE ID = XXX) LIKE CONCAT('%',search_item,'%');
如果你有一个巨大的数据集要通过,那么这将是非常缓慢的


如果速度是一个问题,另一种处理方法(尽管承认要复杂得多)是从数据库中获取所有数据,并构建一个(也称为trie)。一旦您完成了构建trie的开销,与蛮力方法相比,针对输入字符串的匹配速度非常快。

您可以执行以下操作:

SELECT * FROM search_items WHERE (SELECT col1 FROM main_table WHERE ID = XXX) LIKE CONCAT('%',search_item,'%');
如果你有一个巨大的数据集要通过,那么这将是非常缓慢的


如果速度是一个问题,另一种处理方法(尽管承认要复杂得多)是从数据库中获取所有数据,并构建一个(也称为trie)。一旦你完成了构建trie的开销,与蛮力方法相比,匹配输入字符串的速度是闪电般的快。

我意识到这已经晚了十个月,但只是为了子孙后代。我认为您的意思是希望搜索\u items表中的所有行与查询不匹配:

select * from main_table where match(col1,col2) against('search_item');
我将假设您的主_表有一些唯一的标识符列,我将其称为unqid

select * from main_table
WHERE
unqid not in (select unqid 
              from main_table  
              where match(col1,col2) against('search_item')
             )

我的第一个想法是使用减号运算符,但事实证明MySQL没有减号运算符

我意识到这已经晚了十个月,但这只是为了子孙后代。我认为您的意思是希望搜索\u items表中的所有行与查询不匹配:

select * from main_table where match(col1,col2) against('search_item');
我将假设您的主_表有一些唯一的标识符列,我将其称为unqid

select * from main_table
WHERE
unqid not in (select unqid 
              from main_table  
              where match(col1,col2) against('search_item')
             )

我的第一个想法是使用减号运算符,但事实证明MySQL没有减号运算符

不,
like
不是解决方案,我需要使用与全文搜索相同的模式来完成。不,
like
不是解决方案,我需要使用与全文搜索相同的模式来完成