SQLite、FTS、MATCH 和分隔列中的文本
我有一个 SQLite 数据库,其中包含使用 FTS4 创建的虚拟表“myTable”,其中一列“myColumn”文本使用 |
作为分隔字符。
我使用 SELECT * FROM myTable WHERE myColumn MATCH 'out to'; 查询此数据库,并且得到了类似于 "...out|to..."< 的条目。 /code> 但没有“out to”子字符串。
当我将 |
替换为 ;
等标点符号时,也会发生同样的情况。 (请注意,SQLite 文档明确指出您不能使用 _
作为分隔字符。)
为什么会这样以及如何防止这种情况发生?
I have an SQLite database with a virtual table "myTable" created using FTS4, with one column "myColumn" of text using |
as a separating character.
I query this database with SELECT * FROM myTable WHERE myColumn MATCH 'out to';
and I'm getting hits with entries that look like "...out|to..."
but with no "out to" substrings.
The same thing happens when I replace |
with punctuation like ;
. (Note the SQLite docs make explicit that you can't use _
as a separating character.)
Why is that and how do I prevent this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
FTS 的默认分词器会删除索引数据以及输入查询中的所有标点符号。即使您查询
MATCH 'out/to'
,它也会找到条目“... out to ...”的匹配项解决方案是使用短语搜索
MATCH '"out to"'
。如果您希望在记录中查找那些不按该顺序排列的单词,则该方法将不起作用。FTS's default tokenizer drops any punctuation from the indexed data, and also from your input query. It would find a match for a entry "... out to ..." even if you query
MATCH 'out/to'
The solution to this is using phrase searches,
MATCH '"out to"'
. It won't work if you wish to find those words in a record that does not have them in that order.