【问题标题】:SQLite match against wordsSQLite 匹配单词
【发布时间】:2018-01-02 02:55:06
【问题描述】:

我有一个 sqlite 数据库,其中有一个名为 kanji 的表,其中有一个名为 english_meaning 的列。我想查询一个“单词”。

这是我现有的查询和代码:

public Cursor fetchAllKanjiWithQuery(String input) {
    input = "%" + input + "%";
    String query = "SELECT * FROM kanji WHERE literal LIKE ? OR radicals LIKE ? OR english_meaning LIKE ? OR kun_reading LIKE ? OR romaji LIKE ? ORDER BY stroke_count";
    String[] selectionArgs = new String[]{input, input, input, input, input};
    Cursor cursor = db.rawQuery(query, selectionArgs);
    if (cursor != null) {
        cursor.moveToFirst();
    }
    return cursor;
}

输入为“one”时,english_meaning 为“bone”或“oneself”的结果将匹配。

但是,我只对带有单词“one”的字符串感兴趣。例如,有效匹配应包括:

  • “一,部首”
  • “选择一个”
  • “一个计数器”

即“one”可以出现在字符串的开头或结尾,它与其他字符之间用空格分隔。如果可能,还应允许“one”后跟“,”和“.”等标点符号。

目前,我使用 LIKE 和 % input % 的查询没有给出想要的结果。如何解决这个问题?

【问题讨论】:

  • 您应该考虑使用全文搜索。 LIKE 操作符在这里会失败。
  • FTSsqlite.org/fts3.html的参考见这里
  • 感谢指点!看起来全文搜索有我需要的东西@TimBiegeleisen
  • @wayway 我可以用LIKE给你一个查询,但是会很丑。 FTS 可能是一个更好的长期赌注。
  • @TimBiegeleisen 供参考,你能告诉我如何使用LIKE 实现它吗?我不会使用它,因为 FTS 似乎具有更好的性能和灵活性。谢谢!

标签: java android sql database sqlite


【解决方案1】:

为什么不这样做:

SELECT *
 from kanji  
 where (english_meaning = 'one'
    or english_meaning = 'one.'
    or english_meaning = 'one,'
    or english_meaning like 'one %'
    or english_meaning like '% one %'
    or english_meaning like '% one'
    or english_meaning like '% one.'
    or english_meaning like '% one,')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多