无法在SQLite FTS5虚拟表上使用匹配:无法在请求的上下文中使用函数匹配

无法在SQLite FTS5虚拟表上使用匹配:无法在请求的上下文中使用函数匹配,sqlite,Sqlite,在SQLite 3.13.0中尝试使用FTS5时,一个简单的测试失败。我做错了什么 SQLite版本3.13.0 2016-05-18 10:57:30 使用FTS5(test)创建虚拟表testfts; 插入testfts值(“某些测试字符串”); 从测试匹配“test”的testfts中选择*; 错误:无法在请求的上下文中使用函数匹配 试试这个: SELECT * FROM testfts WHERE testfts MATCH 'test'; 或 第一个将在表testfts的所有列中搜索

在SQLite 3.13.0中尝试使用FTS5时,一个简单的测试失败。我做错了什么

SQLite版本3.13.0 2016-05-18 10:57:30 使用FTS5(test)创建虚拟表testfts; 插入testfts值(“某些测试字符串”); 从测试匹配“test”的testfts中选择*; 错误:无法在请求的上下文中使用函数匹配 试试这个:

SELECT * FROM testfts WHERE testfts MATCH 'test';


第一个将在表
testfts
的所有列中搜索字符串
test
。第二个选项将只搜索列
test
(查询字符串中的
test:
前缀就是这样做的)。因为只有一列,所以这两列在这里是等价的。

太好了!非常感谢你。似乎我不了解FTS虚拟表的真实性质。@redneb如果我总共有3行,只想匹配两行怎么办?您有3个选项:(1)在FTS查询中使用布尔表达式,例如,
testfts match'col1:test或col2:test'
,(2)将第三列标记为
未索引
(查看以了解更多详细信息),(3)将第三列移到另一个表中。我有一个表有两列id,content。如果我像这样查询:[q='从表1中选择id,content,其中content与bm25(content)DESC的'university'顺序匹配;']它不起作用!!但如果我查询所有列,它就起作用了!有什么想法吗?@Reihan\u amn请仔细阅读我的答案。
WHERE
子句必须始终引用表,而不是列,即在您的情况下,
WHERE table1匹配“…”
。如果需要匹配特定列,您必须从查询内部引用它,如p呃我上面回答的第二个例子。
SELECT * FROM testfts WHERE testfts MATCH 'test:test';