2014-01-11 87 views
0

我目前使用的是使用FTS的SearchableDictionary中的Sample,但是当我输入单词“apple”时,它显示所有苹果单词而不是仅以苹果开头的单词。我想知道是否有反正显示一个列表 EG) 1)苹果 2)苹果派如何显示单词以苹果开头,而不是显示每个使用FTS找到的苹果?

代替 1)喉结 2)苹果 3)苹果派 4)大苹果

使用android FTS。

据我从FTS明白的是,它使用的不是LIKE匹配,并且它的功能就像正常的SQLite查询的LIKE%的东西%

我会非常感激,如果有人能告诉我应该如何我这样做。

谢谢。

+0

“亚当的苹果”和“大苹果”都有“苹果”,因此会匹配'%LIKE%'。 – CommonsWare

+0

是否有改变它,以便它只会显示以Apple开头的单词? – AuroraBlaze

+0

或使它类似于LIKE something%的方法? ty – AuroraBlaze

回答

0

尝试此查询在代码:

SELECT * FROM TABLE_NAME WHERE Column_name MATCH 'apple*'; 

检查此链接:http://www.sqlite.org/fts3.html#section_3

的FTS引擎提供了通过偏移虚函数的信息。 试试这个

SELECT offsets(docs) FROM docs WHERE docs MATCH 'apple*'; 

在代码中输入以下内容:

Cursor cursor = database.rawQuery("SELECT column_name, offsets(Tablename) FROM entries WHERE column_name MATCH '"apple *"'",null); 

然后使用光标。

+0

我以前曾试过这种方法,它给了我Adam的苹果,大苹果,苹果派和苹果,而不是苹果和苹果派, – AuroraBlaze

+0

Chk这个链接同样的问题问你.http://stackoverflow.com/questions/4432314/using-sqlite-with-fts-on-android ..我仍然试图找出..直到那个时候检查这个林k请发布答案,如果它的工作 –

+0

让我知道如果你有任何成功..检查我编辑的答案 –

1

这就是我在SearchableDictionary的DictionaryDatabase.java文件中所做的。我修改了一些方法代码:

 public Cursor getWordMatches(String query, String[] columns) 
    { 
     String selection = KEY_WORD + " >='" + query +"'"; 
     return query(selection, columns); 
    } 


    private Cursor query(String selection, String[] columns) 
    { 

      SQLiteQueryBuilder builder = new SQLiteQueryBuilder(); 
      builder.setTables(FTS_VIRTUAL_TABLE); 
      builder.setProjectionMap(mColumnMap); 

      Cursor cursor = builder.query(mDatabaseOpenHelper.getReadableDatabase(), 
        columns,selection,null, null, null, KEY_WORD); 

      if (cursor == null) { 
       return null; 
      } else if (!cursor.moveToFirst()) { 
       cursor.close(); 
       return null; 
      } 
      return cursor; 
     } 
相关问题