search/word_search: make toggle for kana independent search
Build and test / build (push) Successful in 9m36s

This commit is contained in:
2026-06-09 11:10:34 +09:00
parent fa7192152d
commit d91584f75a
2 changed files with 26 additions and 10 deletions
+24 -10
View File
@@ -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:
+2
View File
@@ -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,
);