search: fix fuzzySearch api

This commit is contained in:
2026-06-09 11:23:39 +09:00
parent fe3ba1a2d3
commit 0e32fbaeb1
3 changed files with 28 additions and 8 deletions
+9 -1
View File
@@ -34,12 +34,14 @@ extension JaDBConnection on DatabaseExecutor {
Future<List<WordSearchResult>?> jadbSearchWord(
String word, {
SearchMode searchMode = SearchMode.auto,
fuzzyKana = true,
int page = 0,
int? pageSize,
}) => searchWordWithDbConnection(
this,
word,
searchMode: searchMode,
fuzzyKana: fuzzyKana,
page: page,
pageSize: pageSize,
);
@@ -62,7 +64,13 @@ extension JaDBConnection on DatabaseExecutor {
Future<int?> jadbSearchWordCount(
String word, {
SearchMode searchMode = SearchMode.auto,
}) => searchWordCountWithDbConnection(this, word, searchMode: searchMode);
bool fuzzyKana = true,
}) => searchWordCountWithDbConnection(
this,
word,
searchMode: searchMode,
fuzzyKana: fuzzyKana,
);
/// Given a list of radicals, search which kanji contains all
/// of the radicals, find their other radicals, and return those.
+17 -7
View File
@@ -74,10 +74,9 @@ String _filterFTSSensitiveCharacters(String word) {
+ (("$tableName"."orderNum" = 0) * 20)
+ COALESCE("JMdict_EntryScore"."score", 0)
AS "score"
FROM "${tableName}FTS"
JOIN "$tableName" USING ("elementId")
${fuzzyKana ? 'FROM "${tableName}FTS" JOIN "$tableName" USING ("elementId")' : 'FROM "$tableName"'}
LEFT JOIN "JMdict_EntryScore" USING ("elementId")
WHERE "${tableName}FTS"."reading" MATCH ${fuzzyKana ? 'normalize_jp(?1)' : '?1'} || '*'
${fuzzyKana ? 'WHERE "${tableName}FTS"."reading" MATCH normalize_jp(?1) || \'*\'' : 'WHERE "$tableName"."reading" LIKE \'?1\' || \'%\''}
),
non_fts_results AS (
SELECT DISTINCT
@@ -135,10 +134,15 @@ Future<List<ScoredEntryId>> _queryKanji(
);
}
Future<int> _queryKanjiCount(DatabaseExecutor connection, String word) {
Future<int> _queryKanjiCount(
DatabaseExecutor connection,
String word,
bool fuzzyKana,
) {
final (query, args) = _kanjiReadingTemplate(
JMdictTableNames.kanjiElement,
word,
fuzzyKana: fuzzyKana,
countOnly: true,
);
return connection
@@ -172,10 +176,15 @@ Future<List<ScoredEntryId>> _queryKana(
);
}
Future<int> _queryKanaCount(DatabaseExecutor connection, String word) {
Future<int> _queryKanaCount(
DatabaseExecutor connection,
String word,
bool fuzzyKana,
) {
final (query, args) = _kanjiReadingTemplate(
JMdictTableNames.readingElement,
word,
fuzzyKana: fuzzyKana,
countOnly: true,
);
return connection
@@ -297,6 +306,7 @@ Future<int?> fetchEntryIdCount(
DatabaseExecutor connection,
String word,
SearchMode searchMode,
bool fuzzyKana,
) async {
if (searchMode == SearchMode.auto) {
searchMode = _determineSearchMode(word);
@@ -308,11 +318,11 @@ Future<int?> fetchEntryIdCount(
switch (searchMode) {
case SearchMode.kanji:
entryIdCount = await _queryKanjiCount(connection, word);
entryIdCount = await _queryKanjiCount(connection, word, fuzzyKana);
break;
case SearchMode.kana:
entryIdCount = await _queryKanaCount(connection, word);
entryIdCount = await _queryKanaCount(connection, word, fuzzyKana);
break;
case SearchMode.english:
+2
View File
@@ -84,6 +84,7 @@ Future<int?> searchWordCountWithDbConnection(
DatabaseExecutor connection,
String word, {
SearchMode searchMode = SearchMode.auto,
bool fuzzyKana = true,
}) async {
if (word.isEmpty) {
return null;
@@ -93,6 +94,7 @@ Future<int?> searchWordCountWithDbConnection(
connection,
word,
searchMode,
fuzzyKana,
);
return entryIdCount;