0
我正在制作一个使用webview显示存储的HTML数据的android应用程序。现在,我试图结束的问题是如何在搜索某些用户输入字符串时忽略HTML/CSS等标记/元素。我的数据库已经是110MB,我认为使用另一个只有文本和没有HTML的字段只会增加数据库的大小。正则表达式也将很昂贵,可能不可靠。仅忽略SQLite中的HTML标记和搜索文本
有没有其他方法可以做到这一点?
我正在制作一个使用webview显示存储的HTML数据的android应用程序。现在,我试图结束的问题是如何在搜索某些用户输入字符串时忽略HTML/CSS等标记/元素。我的数据库已经是110MB,我认为使用另一个只有文本和没有HTML的字段只会增加数据库的大小。正则表达式也将很昂贵,可能不可靠。仅忽略SQLite中的HTML标记和搜索文本
有没有其他方法可以做到这一点?
也许你可以在你的程序中对查询的记录进行额外的过滤。您可以使用HTML解析器(如Jsoup)去除HTML标签,然后您可以在剩余的文本中搜索。 Jsoup的简单Java示例:
List<String> records = ... // your queried records - potential results
List<String> results = new ArrayList<String>();
for(String r : records) {
Document d = Jsoup.parse(r); // parse HTML
String text = d.text(); // extract text
if (text.contains(searchTerm)) { // or do your search here
results.add(r);
}
}
return results; // you got real results here
它可能不是最好的解决方案,但是是一种选择。我认为它也很昂贵,但比正则表达式更可靠(您试图避免)。
更新:正则表达式的方式
我认为剥离HTML标签的唯一途径,而取是使用regex in SQLite。例如,下面的模式应该用来匹配字符串外的HTML标签:
(^|>)[^<]*(searchterm)[^<]*(<|$)
在下面的示例文本将只匹配1,第3和第4 searchterm
,而不是第二个:
searchterm <tag searchterm> searchterm </tag> searchterm
你可以在行动here看到它。
SQLite中,你可以使用正则表达式是这样的:
WHERE column-name REGEXP 'regular-expression'
谢谢你的答复。我从数据库获取记录时没有办法进行过滤?例如列名像用户字符串?从数据库中提取所有数据以及将减慢搜索过程的处理。 –
这将是正则表达式的方式,我想不出任何其他解决方案。我在我的答案中添加了一个例子,我希望它有帮助。 – juzraai
谢谢。我会看看这里有人能提出更好的方法。然后,我会对您的解决方案进行加权,使其无需使用纯文本并直接查询。 谢谢Juzraai –