search: fix fuzzySearch api
This commit is contained in:
+9
-1
@@ -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.
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user