我已经integrated search based on the official Android documentation了 我正在使用以下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*"
我想知道如何扩展它?允许以下内容:
说我有一些名为:
的物品当用户在搜索框中输入blah
时,搜索结果会显示:
my
mfi
fan item
, fanit
,fit
it
,item
, im
,itm
结果应根据匹配的好坏进行排名,例如,如果字母越远,它们的排名应低于完全匹配,例如mfi
:“我喜欢的项目”应排在最后“MFI thingy”应该排名第一(如果有这样的项目)。
注意:我的min SDK是API级别10,means it has to work SQLite 3.6.22。
类似的功能主要在IDE中找到:
答案 0 :(得分:4)
SQLite的FTS只允许搜索整个单词或单词前缀。
此类模糊搜索没有内置功能。 (并且Android数据库API不允许您添加自定义虚拟表实现。)
答案 1 :(得分:1)
我放松了我的标准来搜索所有单词的开头:
private static String fixQuery(String query) {
return query.trim().replaceAll("\\s+", "*") + "*";
}
效果很好。没有拼写错误,但是当我使用它时感觉很自然。