我正在尝试使用MySQL创建全文搜索。我的查询看起来像这样。
SELECT * FROM customers WHERE MATCH (name, first_name, street, city)
AGAINST ('$parameter' IN boolean MODE)
如果我查询例如Peter
,则一切正常。但是,如果仅输入搜索字符串的开头(Pete
),则会得到空结果。
如何获取包含我的字符串的行,而不仅仅是包含完全相同的行?
答案 0 :(得分:1)
使用NATURAL LANGUAGE MODE
SELECT * FROM customers WHERE MATCH (name, first_name, street, city) AGAINST ('$parameter' IN NATURAL LANGUAGE MODE)
自然语言全文搜索将搜索字符串解释为自由文本(自然人类语言),并且不需要特殊的运算符。如果未指定IN NATURAL LANGUAGE MODE修饰符(请参见以下语法),则全文搜索是自然语言搜索。 MATCH()函数针对文本集合(FULLTEXT索引中包含的一组一个或多个列)搜索字符串。对于表中的每一行,MATCH()返回一个相关性值;也就是说,搜索字符串(作为AGAINST()函数的参数)与MATCH()列表中命名的列中该行文本之间的相似性度量
答案 1 :(得分:0)
MATCH (...) AGAINST ('$parameter*' IN BOOLEAN MODE)
MATCH (...) AGAINST ('Pete*' IN BOOLEAN MODE)
通配符*
可以放在字符串的 end 处,以匹配以它开头的任何内容。那会匹配
Pete
Peter
petechiae
peteforamerica
petethecatbooks
péteux