我有一个数据库结构,其中包含有关汽车轮胎的数据等。 由于这些数据分布在多个字段(名称,英寸,配置文件,et,cb等)中,因此我创建了一个包含搜索所需内容的字段。该字段的示例如下:
Nokian W+ 205/65R15 94T 69512 Frictiontire 2056515F NOK
Fulda TRAMP 4X4 255/55R16 103h 1625555FUTR4X4 561987 Summertire 2555516S FUL
现在到了有趣的部分:我想我可以简单地在这个字段中添加一个FULLTEXT索引,并通过匹配用户在搜索字段中写入的内容来搜索它。
例如,如果用户写道: 205 / 65R15 Frictiontire
...我会得到一个很好的列表,其中该字段包含类似的数据,但没有这样的运气!
我认为MySQL MATCH AGAINST使用起来会更简单,或者说我做错了。
如果我尝试这样的查询:
SELECT * FROM product_search
WHERE MATCH(str) AGAINST ('Nokian 1856515 Frictiontire')
我得到的第一个打击是:
Nokian WR D3 205/65R15 99H XL 69513 Frictiontire 2056515F NOK
当然,“Nokian”和“Frictiontire”都在那里但不是“1856515”。并且有很多行包含所有3个字符串(300个中的300个)! 我试图让它变得更复杂,但没有任何更大的成功,即使我能够使它工作,我也会失去只需从用户输入字符串所需的简单性。
我尝试过很多不同的东西,包括“BOOLEAN MODE”和“NATURAL MODE”。
简而言之:我希望将搜索字符串与所需信息的字段进行匹配。 这可以在MySQL中完成吗?
答案 0 :(得分:0)
如果您想从搜索中订购结果,请使用order by
:
SELECT *
FROM product_search
WHERE MATCH(str) AGAINST ('Nokian 1856515 Frictiontire')
ORDER BY MATCH(str) AGAINST ('Nokian 1856515 Frictiontire') DESC;
如果要求所有三个术语都在结果集的每一行中,请使用布尔模式搜索。