SQLite FTS示例不起作用
我已经下载了最新的SQLite 3.7.15.2 shell Win32,并尝试完全按照编写时的方式执行其中一个FTS示例 但尽管有最后一条评论,SELECT还是导致了空集。这是SQLite中的错误还是过时的文档?正确的语法是什么 对我来说最重要的是这个问题SQLite FTS示例不起作用,sqlite,fts3,fts4,Sqlite,Fts3,Fts4,我已经下载了最新的SQLite 3.7.15.2 shell Win32,并尝试完全按照编写时的方式执行其中一个FTS示例 但尽管有最后一条评论,SELECT还是导致了空集。这是SQLite中的错误还是过时的文档?正确的语法是什么 对我来说最重要的是这个问题 SELECT * FROM docs WHERE docs MATCH '(database OR sqlite) NEAR/5 system'; 也不起作用,我需要在我的应用程序中使用这种类型的查询。有没有其他方法来编写它以使其工作?我
SELECT * FROM docs WHERE docs MATCH '(database OR sqlite) NEAR/5 system';
也不起作用,我需要在我的应用程序中使用这种类型的查询。有没有其他方法来编写它以使其工作?我不知道这是文档还是SQLite的错误,但这里有一些替代方法: 用于和查询 不起作用:
select * from docs where docs match 'sqlite AND database';
使用默示和:
或者似乎有效:
对于或+近查询:
不起作用:
SELECT * FROM docs WHERE docs MATCH '(database OR sqlite) NEAR/5 system';
作品:
SELECT * FROM docs WHERE docs MATCH 'database NEAR/5 system'
UNION
SELECT * FROM docs WHERE docs MATCH 'sqlite NEAR/5 system'
编辑:用于注释word11或word12或word13靠近/2 word21或word22或word23靠近/2 word31或word32或word33中提到的表格。这是我能做的最好的事情,将所有组合与一个联合组合在一起:
SELECT * FROM docs WHERE docs MATCH 'word11 NEAR/2 word21 NEAR/2 word31'
UNION
SELECT * FROM docs WHERE docs MATCH 'word11 NEAR/2 word22 NEAR/2 word32'
UNION
SELECT * FROM docs WHERE docs MATCH 'word11 NEAR/2 word23 NEAR/2 word33'
UNION
SELECT * FROM docs WHERE docs MATCH 'word12 NEAR/2 word21 NEAR/2 word31'
...
当然,上述操作会创建大量SQL。如果您的单词相似,只是结尾不同,则可以使用通配符:
SELECT * FROM docs WHERE docs MATCH 'word1* NEAR/2 word2* NEAR/2 word3*';
文档中的示例使用。 检查PRAGMA编译选项;包括ENABLE_FTS3_括号 您的NEAR查询不工作不是编译选项的问题:
> SELECT * FROM docs WHERE docs MATCH '(database OR sqlite) NEAR/5 system';
Error: malformed MATCH expression: [(database OR sqlite) NEAR/5 system]
问题在于,根据文档,NEAR仅适用于基本搜索表达式:
NEAR查询是通过在两个短语、术语或前缀查询之间放置关键字NEAR来指定的
因此,您必须相应地重写搜索表达式:
> SELECT * FROM docs WHERE docs MATCH '(database NEAR/5 system) OR (sqlite NEAR/5 system)';
a database is a software system
sqlite is a software system
根据文档,默认情况下不支持括号
请看第2部分。编译并启用FTS3和FTS4。您是指“sqlite”和“数据库”吗?编辑:请容忍我。我一生中从未使用过sqlite:这是来自sqlite文档的完全复制粘贴。我只是想让它像下面所描述的那样工作,碰巧UNION对我不起作用,因为我的查询可能是word11或word12或word13格式,靠近/2 word21或word22或word23,靠近/2 word31或word32或word33…@StanLagun-这些可能是可能的,但可能有点太复杂了。我会看一看,看看我是否能想出什么…@StanLagun-我在编辑后的反应:。这些解决方案可能是您想要的,也可能不是您想要的。这可能会完成这项工作,但需要联合大约1000个SELECTs,这可能会对性能产生影响。我认为SQLite是一个非常稳定且文档记录完整的库。所以我觉得很奇怪,官方手册中的简单例子不起作用。我希望这个问题的答案能给我一个线索,告诉我如何以更优雅的方式解决我的主要问题
SELECT * FROM docs WHERE docs MATCH 'word1* NEAR/2 word2* NEAR/2 word3*';
> SELECT * FROM docs WHERE docs MATCH '(database OR sqlite) NEAR/5 system';
Error: malformed MATCH expression: [(database OR sqlite) NEAR/5 system]
> SELECT * FROM docs WHERE docs MATCH '(database NEAR/5 system) OR (sqlite NEAR/5 system)';
a database is a software system
sqlite is a software system