Mysql 在非常小的列上进行全文搜索
我的MySQL数据库中有一个表Books,它有两列标题(varchar(255))和版本varchar(20))。这些值的示例为“微观经济学导论”和“4” 我想让用户根据标题和版本搜索书籍。因此,例如,他们可以进入“微观经济学4”,它将得到正确的结果。我的问题是如何在数据库端设置它 有人告诉我,全文搜索通常是这样做的好方法。但是,由于版本有时只是单个字符(“4”),因此必须设置全文搜索以查看单个字符(ft_min_word_len=1)。。我听说这是非常低效的Mysql 在非常小的列上进行全文搜索,mysql,sql,full-text-search,sql-like,Mysql,Sql,Full Text Search,Sql Like,我的MySQL数据库中有一个表Books,它有两列标题(varchar(255))和版本varchar(20))。这些值的示例为“微观经济学导论”和“4” 我想让用户根据标题和版本搜索书籍。因此,例如,他们可以进入“微观经济学4”,它将得到正确的结果。我的问题是如何在数据库端设置它 有人告诉我,全文搜索通常是这样做的好方法。但是,由于版本有时只是单个字符(“4”),因此必须设置全文搜索以查看单个字符(ft_min_word_len=1)。。我听说这是非常低效的 那么,我应该如何设置此数据库的搜索
那么,我应该如何设置此数据库的搜索?我知道这里可以使用CONCAT/LIKE。。我的问题是,这是否是最好的方法,或者与其他方法相比是否太慢。我的图书数据库有几十万本书,很多用户都在搜索。您可以在
标题
列上设置全文索引,并且只能在版本
列上使用标准运算符匹配数字(>,如果您正在寻找准确的版本搜索,请绕过ft_min_word_len,我建议在用户搜索表单中有两个字段,一个用于标题,一个用于版本,这样您就不必猜测搜索短语中是否/何处有提及的版本(并且版本也可以是可选的)。在这种情况下,在“版本”列中搜索版本将使用“LIKE”
另一个解决方案——因为你的字符大小非常小——是创建一个专门用于全文索引/搜索的新列,在其中连接标题和版本。为了不担心ft_min_word_len和版本,首先连接一个用户不太可能搜索到的由你自己保留的单词,如“EDNB”,当它是一个数字(或小)时,则为编辑
在本例中,当您创建新列时,解析版本(也可以对标题进行解析):
- 将所有仅限数字的单词n更改为“EDNB”+n(例如“4”=>“EDNB4”)
- 然后NewColumn=Title+“”+NewEdition
- 在搜索短语中标识她的所有号码,并将其替换为“EDNB”+n
例如,如果标题为“Recette de la crème brèlée”,版本为“France 4”,则最终搜索栏为“Recette de la creme brulee France EDNB4”。如果用户搜索“crëme 4”,“ë”变为“e”,“4”变为“EDNB4”,她的搜索短语变为“creme EDNB4”.问题是我想不出区分版本的规则。示例版本值:-“4”-“4”-“25周年纪念版”-“特别珍藏版”