SQLite、FTS、MATCH 和分隔列中的文本

发布于 2024-11-18 17:03:55 字数 377 浏览 2 评论 0原文

我有一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

内心荒芜 2024-11-25 17:03:55

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文