Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite FTS示例不起作用_Sqlite_Fts3_Fts4 - Fatal编程技术网

SQLite FTS示例不起作用

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'; 也不起作用,我需要在我的应用程序中使用这种类型的查询。有没有其他方法来编写它以使其工作?我

我已经下载了最新的SQLite 3.7.15.2 shell Win32,并尝试完全按照编写时的方式执行其中一个FTS示例

但尽管有最后一条评论,SELECT还是导致了空集。这是SQLite中的错误还是过时的文档?正确的语法是什么

对我来说最重要的是这个问题

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