我找不到合适的搜索标题的策略。
我有一张放电影的桌子。每部电影都有5-10个不同的名字存储在movie_names (id,name,name_clean,movie_id)表中.
要规范所有名称,我使用脚本转换ascii中的所有名称,删除空格、标点符号等,并将其放在name_clean中。
在搜索时我用
SELECT DISTINCT(movie_id) FROM movie_names WHERE `name_clean` LIKE '%f%' ORDER BY views DESC然后我使用in并选择带有"where in“的table表。
虽然这个策略有效,但由于我的名字清洗,搜索范围很广。我想改进它没有名字清洁,但不知道我是否可以改进它更好。
例如,我想搜索像'f%',但然后我将需要爆炸每个电影名称的文字。
如果我有电影名“我的大电影名字”,我需要做更多的额外的行:
“我很胖的大电影名字”
“非常胖的电影大名”
“胖大电影名”
“大电影名”
“电影名”
“姓名”
同样在人员表上,我使用查询。
SELECT * FROM people WHERE `name1` LIKE '%f%' OR name2 LIKE '%f%' ORDER BY views DESC在搜索电影时,速度是可以的,但速度很宽,选择的结果太多(搜索列是latin_swedish),people表的搜索速度很慢(列是utf8),而且行数更多。
如何在mysql中组织搜索。
发布于 2018-07-10 13:26:42
谢谢大家的停顿,特别是粘稠的一点。
这里的解决方案对我有效。
带有id的新表和带有全文的name列。我在布尔模式" query *“中使用匹配进行查询。效果很好。不需要弹性。
https://dba.stackexchange.com/questions/209788
复制相似问题