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/4/powerbi/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
Android FTS4 sqlite匹配不工作_Android_Sqlite - Fatal编程技术网

Android FTS4 sqlite匹配不工作

Android FTS4 sqlite匹配不工作,android,sqlite,Android,Sqlite,我在这里尝试了几种方法: 在这里: (我认为是迄今为止最好的教程) 但是,我的搜索返回0个结果 以下是我尝试过的: String key = "a"; Cursor c = db.query(true, "texts_virtual", new String[]{"id","title_normalized"}, "title_normalized MATCH '"+key+"'",

我在这里尝试了几种方法:

在这里:

(我认为是迄今为止最好的教程)

但是,我的搜索返回0个结果

以下是我尝试过的:

   String key = "a";
        Cursor c = db.query(true, "texts_virtual",
                new String[]{"id","title_normalized"},
                "title_normalized MATCH '"+key+"'",
                null, null, null, null, null);
=0结果

 String query = "a";
    String[] params = {"%" +query+ "%"};

    Cursor c = db.rawQuery("SELECT * FROM texts_virtual WHERE title_normalized MATCH ?", params);
=0结果太多

我知道虚拟表正在正常工作,因为我可以这样做:

String queryText = "a"; //here i test other texts and they worked too
        String query = "select * from texts_virtual where title_normalized like ? order by number";
        String[] params = {"%" + queryText + "%"};
        Cursor c = db.rawQuery(query, params);
所以这证明了文本是有效的,不起作用的是查询,但我不知道为什么,不是错误,什么都没有,只有0个结果

同样,在我成功之后,我计划在两列中使用多个术语搜索

用户类型“WordA WordB WordC”

它在2列中搜索每个单词并返回结果,但这是为了将来的任务

编辑

表代码创建:

CREATE TABLE texts (id INTEGER PRIMARY KEY AUTOINCREMENT, title_normalized....);

INSERT INTO texts (id, titulo_normalized...) VALUES (1, 'aaaaaa', ...);
继续进行更多的插入,最后进行虚拟创建

CREATE VIRTUAL TABLE texts_virtual USING fts4(content="texts", id, title_normalized, ..other fields);
我可以使用LIKE查询文本,但不能使用MATCH,MATCH返回0个结果=/

编辑2表格的外观:

Table: texts_virtual
----------------------------
id --- title_normalized
--------------------------
1  --- aaaaaaaaab
2  --- abbbbbbbbb
3  --- bbbbbabbbb
4  --- bbbbbbbbbb

FTS模块搜索单词(确切定义取决于使用的单词),或者最多搜索带有前缀的单词

按照设计匹配单词;它找不到“a”,因为数据中没有“a”字


如果要在单词中查找子字符串,必须使用LIKE。

您使用%作为笑话。在FTS请求中,必须使用*代替

类似于“%word%”

匹配“*word*”


我注意到,对于非常短的单词(少于3个字母),LIKE比MATCH快。对于较长的单词,匹配速度更快。

表格创建代码?(安卓系统是否支持fts4?还是只支持fts3?@njzk2补充道,安卓系统中的fts4我不知道,我会搜索是否只支持fts4或fts3)匹配和喜欢的工作方式不同。“a”和“WordA”都不在您显示的示例数据中。@CL。我知道,问题是匹配没有返回结果,它只返回0,但如果我使用LIKE进行相同的搜索,它返回结果=/,WordA只是我将来想做的事情的一个示例,您想找到哪一个示例行?当然有一个单词a,我不明白,我的数据库里有很多单词,在你展示的示例数据中没有单词“a”。正如我所提到的,标记器可能对“单词”有不同的定义。如果我添加了一行,其中只有一个“a”作为值,而没有匹配项,该如何解释?还是FTS的“不同概念”吗?