python – 假设我在数据库中有400行人名.搜索他们名字的最佳方法是什么?

python – 假设我在数据库中有400行人名.搜索他们名字的最佳方法是什么?,第1张

概述他们还会搜索他们名字的一部分.不仅是带空格的单词. 如果他们输入“马特”,我希望也能找回“马修”. SELECT * FROM mytable WHERE name LIKE 'matt%' OR name LIKE '[ ,-/]matt%' 笔记: 1)花式通配符.不使用更简单的LIKE’%xyz%’形式的原因是,根据xyz,数据库可以返回许多不相关的记录.例如,在“马特”搜索的情况下,“ 他们还会搜索他们名字的一部分.不仅是带空格的单词.
如果他们输入“马特”,我希望也能找回“马修”.解决方法
SELECT * FROM mytable WHERE name liKE 'matt%' OR name liKE '[,-/]matt%'

笔记:
1)花式通配符.不使用更简单的liKE’%xyz%’形式的原因是,根据xyz,数据库可以返回许多不相关的记录.例如,在“马特”搜索的情况下,“Jeff Zermatt”.
第二个通配符键中的括号包括所有分隔符,这些分隔符可以指示单词之间的中断.另一种通配符模式是[^ A-Z0-9](在搜索brian时可能会产生一些O’Brian,但也许并不是坏事…)

2)表现.因为此表中的记录很少,所以前面的通配符方法非常可行,当然也是最简单的方法.没有理由再搜索了!
如果记录非常宽(许多字段中的一些字段长度超过30个字符),则可以在名称上创建索引.前端通配符仍然需要扫描,但这将在较窄的索引上,因此更容易适应缓存等.
实际上,如果不是SELECT *,那么这个查询只针对mytable表的几个字段[如果这个表的记录是“宽”],你可以创建一个由所有这些字段组成的索引.
记录的数量是否会超过50,000(并且,在较小程度上,应用程序会以高于每分钟40次的速率使用类似查询“点击”数据库),您可以考虑引入更有效的处理方式关键字:全文目录或带有各个关键字的“手工制作”表.

3)另一种方法的优点.应用程序维护一个表,其中包含从全名中轻松解析的各个关键字列表的解决方案的优点,不仅提供了更好的扩展(当表和/或使用增长时),而且还引入了改进搜索的质量.例如,它可以通过引入共同点来改善有效召回常用的名字昵称(比尔或威尔或比利为威廉,迪克为理查德,杰克或约翰尼为约翰等).通过更复杂的方法开辟的另一种可能性是引入Soundex或修改名称标记的Soundex编码,允许用户定位名称,即使它们可能错误拼写或忽略精确拼写(例如Wilmson vs. Wilmsen vs. Willmsonn等.)

总结

以上是内存溢出为你收集整理的python – 假设我在数据库中有400行人名.搜索他们名字的最佳方法是什么?全部内容,希望文章能够帮你解决python – 假设我在数据库中有400行人名.搜索他们名字的最佳方法是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1195860.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存