【发布时间】: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