SQLite:一个单词中的FTS匹配可以忽略哪个字符
Posted
技术标签:
【中文标题】SQLite:一个单词中的FTS匹配可以忽略哪个字符【英文标题】:SQLite: which character can be ignored with FTS match in one word 【发布时间】:2013-03-05 16:35:30 【问题描述】:我需要找到任何特殊字符。如果我把它放在一个单词的中间,SQLite FTS 匹配可以忽略它,就好像它不存在一样,例如:
Text Body: book's
如果我的匹配字符串是“books”,我需要得到“book's”的结果.. 使用搬运工或简单的分词器没问题。
我为此尝试了许多字符,例如:book!s、book?s、book|s、book,s、book:s……,但是当通过匹配搜索“books”时,没有返回这些结果。
我不明白,为什么?
我正在使用:无内容 FTS4 表和外部内容 FTS4 表,我的文本正文中每个单词都有很多字符,应该在搜索时更改为忽略它..
我无法更改匹配查询,因为我不知道单词中的特殊字符在哪里。另外,我需要让原始字长等于 FTS 索引字的长度才能使用匹配信息或 sn-p();因此,我无法从文本正文中删除这些字符。
【问题讨论】:
【参考方案1】:默认分词器不会忽略标点符号,而是将它们视为单词分隔符。
因此,文本正文或匹配字符串 book's
将以两个词结尾,book
和 s
。
这些永远不会匹配像books
这样的单一作品。
要忽略 '
这样的字符,您必须 install your own custom tokenizer。
【讨论】:
我正在使用 .net 中的“System.Data.SQLite”,所以我可以从 C# 编写自定义标记器吗?我对C或C++一无所知,那该怎么办?另一种方法可以将 MATCH 函数覆盖为 C# 中的 SQLite 函数,如 REGEXP 函数?MATCH
已经是自定义函数,由 FTS 虚拟表实现。你必须学习 C,或者聘请有能力的人。
谢谢.. 另外两件事,1:有什么方法可以将正则表达式与 FTS 或 MATCH 一起使用? 2:这是破解 SQLite 标记器的正确方法吗?如果可以,如何解决我的问题?见:sqlite.1065341.n5.nabble.com/…
没有。否(您想忽略,而不是分隔)。 (而且问题不属于 cmets。)以上是关于SQLite:一个单词中的FTS匹配可以忽略哪个字符的主要内容,如果未能解决你的问题,请参考以下文章