如何用SQLite的FTS3实现模糊search?

我已经集成了基于官方Android文档的search ,我正在使用下面的SQLite架构和查询:

CREATE VIRTUAL TABLE Search USING FTS3 ( _id, name, location ); select * from Search where name MATCH ? -- where ? is the user typed exact "query" -- or if it doesn't have spaces or stars I append a star to search prefix: "query*" 

我想知道如何扩展它? 允许以下内容:

说我有一些项目命名:

  • 我的花式项目
  • 我的秘密物品
  • 项目#1
  • 你的花式项目

当用户在search框中键入blah ,search结果将显示:

  • my
    • 我的花式项目
    • 我的秘密物品
  • mfi
    • 我很高兴
  • fan itemfanitfit
    • 我的粉丝 cy em
    • 你的粉丝 cy em
  • ititemimitm
    • 我的花式 te m
    • 我的秘密我的
    • 我是 #1
    • 喜欢我的

结果应该根据比赛的好坏来排名,例如,如果字母离得越远,他们的排名应该低于完全匹配,比如mfi :“My Fancy Item”应该排在最后,“MFI thingy”应该排在第一位(如果有这样的项目)。

注意:我最小的SDK是API级别10,这意味着它必须使用SQLite 3.6.22 。

类似的function大部分可以在IDE中find:

  • Eclipse: Open Type和Open Resource
  • IntelliJ IDEA 导航到*
  • 崇高的文本去任何东西

Solutions Collecting From Web of "如何用SQLite的FTS3实现模糊search?"

SQLite的FTS只允许search整个单词或单词前缀。

没有像这样的模糊search的内置function。 (而Android数据库API不允许你添加自定义虚拟表的实现。)

我放松了我的标准去search所有的单词开始:

 private static String fixQuery(String query) { return query.trim().replaceAll("\\s+", "*") + "*"; } 

它工作得很好。 没有打字错误,但使用时感觉很自然。