sql - 在 SQLite FTS3 搜索中包含部分匹配项

标签 sql search sqlite full-text-search fts3

我的简单 SQLite FTS3 实现目前将用户查询与存储的结果匹配并返回它们,只要这些结果包含用户查询中的所有单词(换句话说,FTS 表是使用简单的标记器创建的)。

现在,我想让搜索更加智能,我希望它根据查询中与结果匹配的单词数对结果进行排名/排序。例如,

SELECT name FROM nametable WHERE name MATCH 'fast food restaurant'  

当前返回的

SUBWAY FAST FOOD RESTAURANT
MCDONALDS FAST FOOD RESTAURANT

应该返回

SUBWAY FAST FOOD RESTAURANT
MCDONALDS FAST FOOD RESTAURANT
CHIPOTLE FAST FOOD
PIZZA FAST FOOD
GOOD FOOD OUTLET

按这个顺序。换句话说,搜索输出不应仅限于必须包含用户查询的所有单词的结果,而是将包含所有单词的结果放在列表中较高的位置,同时为返回部分匹配的结果留出空间。

执行此操作的一种简单方法是使用用户输入的所有排列运行多个查询,并按所需顺序对结果进行 UNION,但这会相当低效。

最佳答案

更容易做到:

SELECT name FROM nametable WHERE name MATCH 'fast OR food OR restaurant'

无需处理多个查询。

关于sql - 在 SQLite FTS3 搜索中包含部分匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6543369/

相关文章:

ios - 使用 NSFetchResult Controller 搜索

c# - 如何在字符串中搜索一个词,然后得到这个词后面的数字?

c# - 如何使用 Sqlite 数据库在 C# 中通过单元格的值更改特定的数据网格单元格属性

python - 在 sqlite 数据库中使用 python 进行字符串拆分和格式化

android - 数据库创建语句没有创建第二个表?

mysql - 优化mysql多重左连接

PHP 搜索脚本无法正确返回页面

mysql Event每年运行一次计算

php - 如何在服务器上安全地存储sql dbs

sqlite - 跨多台服务器复制sqlite数据库的方法