【问题标题】:Optimizing full text search in SQLite优化 SQLite 中的全文搜索
【发布时间】:2013-03-13 18:40:37
【问题描述】:
我正在使用全文搜索来查找巨大树结构中的某些项目。大多数时候我只对匹配节点下的项目感兴趣。但是当我使用 select * from MYTABLE where match 'XXX' 时,它会在整个树结构中进行全文搜索。
有没有一种方法可以指定 MYTABLE 中用于全文搜索的行? (即匹配“XXX”)。任何提示将不胜感激!
【问题讨论】:
标签:
sqlite
optimization
full-text-search
string-matching
【解决方案1】:
在 FTS 表上有效工作的唯一查询是 MATCH 搜索和 rowid/docid 搜索。
因此,要搜索子树,您应该使子树(根)的 ID 成为正在搜索的全文的一部分。
请注意,大多数分词器会丢弃间断字符,因此 ID 应该是一个句子,其中的单词指定了从根到子树的路径。
例如:
SELECT *
FROM MyTable
WHERE MyTable MATCH 'ID:"root 3 1 4" Text:whatever'
如果您在每个单词中包含树级别,您可能会增加 ID 中单词的选择性:
SELECT *
FROM MyTable
WHERE MyTable MATCH 'ID:"1x3 2x1 3x4" Text:whatever'