0

我面临一个我不确定如何处理的数据库(特别是 sqlite)查询。

我正在寻找在其“名称”属性和常量之间具有 1-n 个单词匹配的所有元组。按降序排列。

例如,它是一个包含食品的数据库。如果常量是“Maranatha Natural Almond Butter 26oz Lightly Roasted”,我希望返回数据库中包含该常量中至少一个单词的任何元组。例如,“Almond Butter Natural”会出现在“Maranatha Natural”之前,而“Maranatha Natural”会出现在“Almond”之前,等等。

本质上,只要元组属性和常量之间有一个相交的单词,它就可以匹配。

4

1 回答 1

0

匹配词是 SQLite 的全文搜索扩展的设计目的。请阅读该页面以了解必须如何编译 SQLite 以及可能的情况,但我将添加一些备注:

简单的匹配是通过如下查询完成的:

SELECT * FROM foods_fts_tab WHERE name MATCH 'Maranatha Natural Almond etc.'

这将只返回至少一个单词匹配的所有记录。

您可以使用辅助函数返回的信息对匹配进行加权。例如,

SELECT ... ORDER BY length(offsets(foods_fts_tab)) DESC

将按匹配单词的数量排序。

您正在询问单词匹配的数量,但真正的搜索引擎也使用其他信息来计算相关性分数。请参阅matchinfo()第 4.3 节中的功能和附录 A 中的示例。

于 2012-09-27T20:51:33.633 回答