2015-11-05 37 views
1

我有一张包含大约一百万辆汽车记录的表格。我想要实现搜索功能,使用户可以对车辆的探索,可惜FULLTEXT列包含数据,如...MySql FULLTEXT在字词之间搜索字符

“动车Fortuner-GJ00XX1234丰田”
“动车Fortuner-GJ00XX04567丰田”
等.....

这意味着特定的记录是“动车”模型“fortuner”,注册号为“GJ00XX1234”和公司名“丰田”。

用户试图搜索“fortuner 1234”或“1234”,因为通常用户不记得完整的注册号码。因此,MySql返回所有记录与“fortuner”,但它不能搜索“1234”。但搜索“GJ00XX1234”的作品。

我知道使用“LIKE'%1234%'”查询可行,但存在性能问题,所以我必须仅使用FULLTEXT来实现此目的。

有人可以指导我如何实现它,而无需修改数据? 谢谢。

+2

我尊重投票,但一个应该提到他为什么投下来的问题。 –

回答

0

拆分空格的搜索字符串,并在查询添加这样

WHERE data LIKE '%fortuner%' OR data LIKE '%1234%' 

或简单来说

WHERE data REGEXP 'fortuner|1234' 
在后一种情况下

,你的PHP代码可以是:

$searchString = "fortuner 1234"; 
$search = str_replace(' ','|','fortuner 1234'); 

更新:

对于FULLTEXT:

WHERE   
MATCH (data) 
AGAINST ('+fortuner +1234' IN BOOLEAN MODE) 

这里是manual

在执行此功能,MySQL使用有时被称为 所暗示的布尔逻辑,其中

  • 主张并

  • 代表不

[无操作]暗示或明示

+0

我知道使用“喜欢”可以实现,但我有数据非常庞大的数量,所以我只用'FULLTEXT人指数。 –

+0

创建一个包含来自FULLTEXT的可能关键字的列。从中搜索 – Thamilan

+0

通过创建新列和放置关键字(仅用于搜索目的)来创建冗余不是好主意。 –

1

您不能使用全文搜索,而不分离/添加到索引实现这一目标。有一个boolean full-text search mode,允许追加一个小丑*,但由于索引在MySQL中工作的方式,所以它是not possible to prepend the joker

为了保持全文搜索的性能优势,最好的办法可能是在全文索引中包含第二个包含数字的列或者仅为搜索设置一个新列,其中包含类似motor car fortuner gj00xx1234 toyota 1234的内容。

如果你在前面加上%如。 LIKE %1234%REGEXP它会打你的表现,因为索引不能被利用 - 导致全表扫描。取决于数据大小有多强烈。