我有几个SQLite数据库,大小从1到150 MB不等,有多达30,000行。被搜索的数据是基本的HTML。我正在寻找最快的搜索HTML文本的方法,同时补偿任何HTML标记。
例如,如果我正在寻找&#34;天空是蓝色的&#34;并且数据库中的记录有一个斜体标记(即"the <i>sky</i> is blue"
),我需要它才能找到它。
显然是直接搜索,
SELECT * FROM dictionary WHERE definition LIKE "%the sky is blue%"
没有工作。
所以我尝试按任意顺序搜索记录中的所有单词,然后用正则表达式过滤它们。这有效,但很慢。它提供了太多必须由正则表达式扫描的错误记录。特别是如果搜索字符串中有常见的单词。
我尝试按顺序搜索单个单词(LIKE "%the%sky%is%blue%"
),但这有时会导致SQL搜索由于某种原因而挂起较大的记录。我认为这是因为短的共同字符串(&#34;&#34;,&#34; at&#34;等)产生了1000次点击。
对于我的目的,SQL正则表达式搜索也太慢了。
一个选项是制作另一个表,其中所有记录中的数据都被剥离了HTML标记并进行搜索,但这几乎是数据库大小的两倍。
还有哪些其他选项可以补偿标签?
答案 0 :(得分:4)
正如您所发现的那样,关系系统不是为这种搜索而设计的,而且您无法解决这个问题。确实,最好的答案是将文本的预剥离版本存储为纯粹用于搜索目的。即使一个300MB的文件在今天的术语中也会被认为很小,所以除非空间是一个真正的约束,否则我不会为此烦恼太多。
虽然没有真正需要另一张桌子,但这只会让事情复杂化。我建议您只需将剥离的文本作为附加列添加到现有表格中。