允许用户搜索项目的最佳方法是什么

时间:2015-05-12 09:21:57

标签: python mysql search

我的应用程序中有一个搜索功能,允许用户搜索产品。目前查询是

select * from products where title like '%search_term%'

这是实现这一目标的一种快速而苛刻的方式。我现在想改进这一点,并想知道如何做到这一点。

三个简短的例子

  1. 能够搜索复数。
  2. 如果用户搜索Golden Delicious Apple,我的产品标题可能为apples。由于复数,行不会返回。

    1. 当一些单词可以是一个/两个单词
    2. 我的产品标题可能是Lemon Cupcakes,但如果用户搜索cup cakes

      1. 如果用户搜索apples and lemons,那么我应该返回示例1和2中的两行还是我什么都不返回?什么是最佳实践。
      2. 仅供参考我使用的是python和peewee。我可以想到如何做到这一点,但这一切都变得非常复杂。

1 个答案:

答案 0 :(得分:0)

嗯,根据您使用的数据库,您有几个选项。

SQLite有一个非常好的全文搜索扩展,支持词干分析(规范化复数形式等)。 Peewee对SQLite FTS有很多支持:

Postgresql也有tsvector数据类型的全文。 Peewee也支持这一点:

最后,MySQL还支持全文搜索,虽然我还没有使用Peewee进行实验,我很确定它应该是开箱即用的:

关于问题2,"杯子蛋糕" - > "纸杯蛋糕",我不确定在这种情况下最佳解决方案是什么。

问题3,我知道SQLite将正确处理查询中的布尔表达式,例如"苹果和柠檬"将匹配包含两者的文件,而#34;苹果或柠檬"将匹配包含一个或另一个的文档。我想postgres和mysql也一样。