search/word_search: make toggle for kana independent search
Build and test / build (push) Successful in 9m36s
Build and test / build (push) Successful in 9m36s
This commit is contained in:
@@ -46,6 +46,7 @@ String _filterFTSSensitiveCharacters(String word) {
|
||||
int? pageSize,
|
||||
int? offset,
|
||||
bool countOnly = false,
|
||||
bool kanaIndependent = true,
|
||||
}) {
|
||||
assert(
|
||||
tableName == JMdictTableNames.kanjiElement ||
|
||||
@@ -68,7 +69,7 @@ String _filterFTSSensitiveCharacters(String word) {
|
||||
"$tableName"."entryId",
|
||||
100
|
||||
+ (("$tableName"."reading" = ?1) * 100000)
|
||||
+ (("${tableName}FTS"."reading" = normalize_jp(?1)) * 10000)
|
||||
${kanaIndependent ? '+ (("${tableName}FTS"."reading" = normalize_jp(?1)) * 10000)' : ''}
|
||||
+ (("$tableName"."reading" LIKE ?1 || '%') * 20)
|
||||
+ (("$tableName"."orderNum" = 0) * 20)
|
||||
+ COALESCE("JMdict_EntryScore"."score", 0)
|
||||
@@ -76,7 +77,7 @@ String _filterFTSSensitiveCharacters(String word) {
|
||||
FROM "${tableName}FTS"
|
||||
JOIN "$tableName" USING ("elementId")
|
||||
LEFT JOIN "JMdict_EntryScore" USING ("elementId")
|
||||
WHERE "${tableName}FTS"."reading" MATCH normalize_jp(?1) || '*'
|
||||
WHERE "${tableName}FTS"."reading" MATCH ${kanaIndependent ? 'normalize_jp(?1)' : '?1'} || '*'
|
||||
),
|
||||
non_fts_results AS (
|
||||
SELECT DISTINCT
|
||||
@@ -88,7 +89,7 @@ String _filterFTSSensitiveCharacters(String word) {
|
||||
AS "score"
|
||||
FROM "$tableName"
|
||||
LEFT JOIN "JMdict_EntryScore" USING ("elementId")
|
||||
WHERE "$tableName"."reading" LIKE '%' || normalize_jp(?1) || '%'
|
||||
WHERE "$tableName"."reading" LIKE '%' || ${kanaIndependent ? 'normalize_jp(?1)' : '?1'} || '%'
|
||||
AND "$tableName"."entryId" NOT IN (SELECT "entryId" FROM "fts_results")
|
||||
)
|
||||
|
||||
@@ -104,23 +105,21 @@ String _filterFTSSensitiveCharacters(String word) {
|
||||
${offset != null ? 'OFFSET ?' : ''}
|
||||
'''
|
||||
.trim(),
|
||||
[
|
||||
_filterFTSSensitiveCharacters(word),
|
||||
?pageSize,
|
||||
?offset,
|
||||
],
|
||||
[_filterFTSSensitiveCharacters(word), ?pageSize, ?offset],
|
||||
);
|
||||
}
|
||||
|
||||
Future<List<ScoredEntryId>> _queryKanji(
|
||||
DatabaseExecutor connection,
|
||||
String word,
|
||||
bool kanaIndependent,
|
||||
int? pageSize,
|
||||
int? offset,
|
||||
) {
|
||||
final (query, args) = _kanjiReadingTemplate(
|
||||
JMdictTableNames.kanjiElement,
|
||||
word,
|
||||
kanaIndependent: kanaIndependent,
|
||||
pageSize: pageSize,
|
||||
offset: offset,
|
||||
);
|
||||
@@ -150,12 +149,14 @@ Future<int> _queryKanjiCount(DatabaseExecutor connection, String word) {
|
||||
Future<List<ScoredEntryId>> _queryKana(
|
||||
DatabaseExecutor connection,
|
||||
String word,
|
||||
bool kanaIndependent,
|
||||
int? pageSize,
|
||||
int? offset,
|
||||
) {
|
||||
final (query, args) = _kanjiReadingTemplate(
|
||||
JMdictTableNames.readingElement,
|
||||
word,
|
||||
kanaIndependent: kanaIndependent,
|
||||
pageSize: pageSize,
|
||||
offset: offset,
|
||||
);
|
||||
@@ -244,6 +245,7 @@ Future<List<ScoredEntryId>> fetchEntryIds(
|
||||
DatabaseExecutor connection,
|
||||
String word,
|
||||
SearchMode searchMode,
|
||||
bool kanaIndependent,
|
||||
int? pageSize,
|
||||
int? offset,
|
||||
) async {
|
||||
@@ -259,11 +261,23 @@ Future<List<ScoredEntryId>> fetchEntryIds(
|
||||
late final List<ScoredEntryId> entryIds;
|
||||
switch (searchMode) {
|
||||
case SearchMode.kanji:
|
||||
entryIds = await _queryKanji(connection, word, pageSize, offset);
|
||||
entryIds = await _queryKanji(
|
||||
connection,
|
||||
word,
|
||||
kanaIndependent,
|
||||
pageSize,
|
||||
offset,
|
||||
);
|
||||
break;
|
||||
|
||||
case SearchMode.kana:
|
||||
entryIds = await _queryKana(connection, word, pageSize, offset);
|
||||
entryIds = await _queryKana(
|
||||
connection,
|
||||
word,
|
||||
kanaIndependent,
|
||||
pageSize,
|
||||
offset,
|
||||
);
|
||||
break;
|
||||
|
||||
case SearchMode.english:
|
||||
|
||||
@@ -38,6 +38,7 @@ Future<List<WordSearchResult>?> searchWordWithDbConnection(
|
||||
DatabaseExecutor connection,
|
||||
String word, {
|
||||
SearchMode searchMode = SearchMode.auto,
|
||||
bool kanaIndependent = true,
|
||||
int page = 0,
|
||||
int? pageSize,
|
||||
}) async {
|
||||
@@ -50,6 +51,7 @@ Future<List<WordSearchResult>?> searchWordWithDbConnection(
|
||||
connection,
|
||||
word,
|
||||
searchMode,
|
||||
kanaIndependent,
|
||||
pageSize,
|
||||
offset,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user