Android Java SQLite搜索/匹配问题

时间:2011-06-24 14:14:14

标签: java android sqlite

所以我试图搜索一个列,其中字符串是逗号分隔的单词列表,没有空格,如一,二,三,四等等。我面临的问题是我正在尝试匹配字符串中的确切单词。截至目前我只是使用%word%来找到匹配当然有效,但问题是不完全是因为如果我搜索'word'它也会匹配'words','worded'等等上。所以问题是我如何搜索并获得确切的词?

3 个答案:

答案 0 :(得分:1)

在列中的字符串值后附加并添加逗号,然后在其中搜索您的术语,该术语在其两侧也有逗号:

   one,two,three,twofold 

成为

  ,one,two,three,twofold,

然后搜索

   %,two,%


 where ',' + mycolumn + ',' like '%,two,%'

edit: in SQLite replace '+' with '||' (pipe pipe): where ',' || mycolumn || ',' like  '%,two,%'

您不必更改(“篡改”)数据库记录本身。

P.S。搜索项两侧的通配符消除了使用索引加速搜索的可能性,因此不建议在大型数据集上使用此方法。但话又说回来,也不是以逗号分隔的列表: - )

P.P.S。我不知道你正在使用什么设备,或者桌子的大小,但是在几年前的PC上,需要SQlite 8ms才能使用这种逗号连接方法搜索3000条记录。

答案 1 :(得分:1)

这里存在设计问题。您正在尝试实现的目标数据库结构不正确。在一个列中存储多个值并尝试匹配单个值可以使用其他一些数据库作为MySQL(使用SET类型),但它不在SQLite上。所以你可以尝试各种奇怪的字符串匹配解决方案,但它不会很干净,你将无法利用SQLite优化。这会影响表现。

您可以使用的是一个单独的words表,其中包含每个单词的唯一记录和另一个foobar_words表,用于建立单词与您的主foobar之间的多对多关系{{ 1}}表。然后,您可以通过使用连接精确匹配单个单词。如果存在性能问题,使用此架构,您应该能够使用索引进行优化。

答案 2 :(得分:0)

如果您不想弄乱字符串,可以修改您的sql以便查看where mycolumn like 'word,%' or mycolumn like '%,word,%' or mycolumn like '%,word'