2014-01-11 88 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; 
     } 
相關問題