【发布时间】:2015-02-18 06:44:44
【问题描述】:
我已经有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*"
我想知道如何扩展它?允许以下内容:
假设我有一些名为:
- 我喜欢的物品
- 我的秘密物品
- 项目 #1
- 您的精美物品
当用户在搜索框中输入blah 时,搜索结果会显示:
-
my- 我的花式物品
- 我的秘密物品
-
mfi- My Fancy 我tem
-
fan item,fanit,fit- 我的粉丝cy 它em
- 你的粉丝cy 它em
-
it,item,im,itm- 我的幻想我tem
- 我的秘密我tem
- 我米 #1
- 你喜欢我tem
结果应该根据匹配的好坏进行排名,例如,如果字母距离较远,它们的排名应该低于精确匹配,例如mfi:“My Fancy Item”应该排名最后,“MFI” thingy”应该排在第一位(如果有这样的项目)。
注意:我的最小 SDK 是 API 级别 10,means it has to work SQLite 3.6.22。
在 IDE 中可以找到类似的功能:
- Eclipse:Open Type 和 Open Resource
- IntelliJ IDEA Navigate to *
- 崇高文本Go to anything
【问题讨论】:
-
没有一种方法可以实现模糊搜索。您的要求太模糊,无法给出正确的答案。
-
*l*i*k*e*t*h*i*s*...但我确实担心这个解决方案的效率 -
@popovitsj 用户输入任何内容,如果与名称的某些部分匹配,则会显示结果。
-
如果它比@Selvin 简单的话是对的,但这几乎没用。从用户的角度来看,它会给出很多“意想不到的”匹配。
-
您可以使用 sim metric 进行模糊搜索,对有限数量的条目有用链接:sourceforge.net/projects/simmetrics
标签: android sqlite search full-text-search fts3