Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 允许用户搜索项目的最佳方式是什么_Python_Mysql_Search - Fatal编程技术网

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

Python 允许用户搜索项目的最佳方式是什么,python,mysql,search,Python,Mysql,Search,我的应用程序中有一个搜索功能,允许用户搜索产品。当前查询是 从标题为“%search\u term%”的产品中选择* 这是一种快速而粗糙的实现方法。我现在想改进这个,想知道我如何才能做到这一点 三个简短示例 能够搜索复数 我对该产品的标题可能是Golden Delicious Apple,如果用户搜索apples。由于复数形式,该行将不会返回 当某些单词可能是一个或两个单词时 我的产品标题可能是柠檬杯蛋糕,但如果用户搜索杯蛋糕 如果用户搜索苹果和柠檬,那么我应该返回示例1和2中的两行还是什么也不

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

从标题为“%search\u term%”的产品中选择*

这是一种快速而粗糙的实现方法。我现在想改进这个,想知道我如何才能做到这一点

三个简短示例

  • 能够搜索复数
  • 我对该产品的标题可能是
    Golden Delicious Apple
    ,如果用户搜索
    apples
    。由于复数形式,该行将不会返回

  • 当某些单词可能是一个或两个单词时
  • 我的产品标题可能是
    柠檬杯蛋糕
    ,但如果用户搜索
    杯蛋糕

  • 如果用户搜索
    苹果和柠檬
    ,那么我应该返回示例1和2中的两行还是什么也不返回?什么是最佳实践

  • 仅供参考,我正在使用python和peewee。我可以想出一些方法,但很快就会变得非常复杂。

    好吧,根据您使用的数据库,您有几个选择

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

    Postgresql也通过
    tsvector
    数据类型提供全文。Peewee也支持这一点:

    • 关于postgresql搜索的好文章:
    最后,MySQL还支持全文搜索,尽管我还没有使用Peewee进行过尝试,但我非常确定它应该是开箱即用的:


    关于问题2,“杯形蛋糕”->“杯形蛋糕”,我不确定在这种情况下最好的解决方案是什么

    对于问题3,我知道SQLite将正确处理查询中的布尔表达式,例如,“苹果和柠檬”将匹配包含两者的文档,而“苹果或柠檬”将匹配包含其中一个的文档。我想postgres和mysql也会这么做