Implemented also searching for bank code in query for bank name and city as otherwise if bank code gets partly entered this would yield no search results

This commit is contained in:
dankito 2020-11-19 22:42:13 +01:00
parent 103968710c
commit 7d372c1ca0
3 changed files with 14 additions and 9 deletions

View File

@ -3,7 +3,7 @@ package net.dankito.banking.bankfinder
abstract class BankFinderBase : IBankFinder { abstract class BankFinderBase : IBankFinder {
protected abstract fun findBankByNameOrCityForNonEmptyQuery(query: String): List<BankInfo> protected abstract fun findBankByNameBankCodeOrCityForNonEmptyQuery(query: String): List<BankInfo>
abstract fun searchBankByBic(bic: String): BankInfo? abstract fun searchBankByBic(bic: String): BankInfo?
@ -20,7 +20,7 @@ abstract class BankFinderBase : IBankFinder {
return findBankByBankCode(query) return findBankByBankCode(query)
} }
return findBankByNameOrCityForNonEmptyQuery(query) return findBankByNameBankCodeOrCityForNonEmptyQuery(query)
} }

View File

@ -19,17 +19,17 @@ open class InMemoryBankFinder() : BankFinderBase(), IBankFinder {
return getBankList().filter { it.bankCode.startsWith(query) } return getBankList().filter { it.bankCode.startsWith(query) }
} }
override fun findBankByNameOrCityForNonEmptyQuery(query: String): List<BankInfo> { override fun findBankByNameBankCodeOrCityForNonEmptyQuery(query: String): List<BankInfo> {
val queryPartsLowerCase = query.toLowerCase().split(" ", "-") val queryPartsLowerCase = query.toLowerCase().split(" ", "-")
return getBankList().filter { bankInfo -> return getBankList().filter { bankInfo ->
checkIfAllQueryPartsMatchBankNameOrCity(queryPartsLowerCase, bankInfo) checkIfAllQueryPartsMatchBankNameBankCodeOrCity(queryPartsLowerCase, bankInfo)
} }
} }
protected open fun checkIfAllQueryPartsMatchBankNameOrCity(queryPartsLowerCase: List<String>, bankInfo: BankInfo): Boolean { protected open fun checkIfAllQueryPartsMatchBankNameBankCodeOrCity(queryPartsLowerCase: List<String>, bankInfo: BankInfo): Boolean {
for (queryPartLowerCase in queryPartsLowerCase) { for (queryPartLowerCase in queryPartsLowerCase) {
if (checkIfQueryMatchesBankNameOrCity(bankInfo, queryPartLowerCase) == false) { if (checkIfQueryMatchesBankNameBankCodeOrCity(bankInfo, queryPartLowerCase) == false) {
return false return false
} }
} }
@ -37,8 +37,9 @@ open class InMemoryBankFinder() : BankFinderBase(), IBankFinder {
return true return true
} }
protected open fun checkIfQueryMatchesBankNameOrCity(bankInfo: BankInfo, queryLowerCase: String): Boolean { protected open fun checkIfQueryMatchesBankNameBankCodeOrCity(bankInfo: BankInfo, queryLowerCase: String): Boolean {
return bankInfo.name.toLowerCase().contains(queryLowerCase) return bankInfo.name.toLowerCase().contains(queryLowerCase)
|| bankInfo.bankCode.startsWith(queryLowerCase)
|| bankInfo.city.toLowerCase().startsWith(queryLowerCase) || bankInfo.city.toLowerCase().startsWith(queryLowerCase)
|| bankInfo.branchesInOtherCities.any { it.toLowerCase().startsWith(queryLowerCase) } || bankInfo.branchesInOtherCities.any { it.toLowerCase().startsWith(queryLowerCase) }
} }

View File

@ -85,7 +85,7 @@ open class LuceneBankFinder(indexFolder: File) : BankFinderBase(), IBankFinder {
return getBanksFromQuery(luceneQuery) return getBanksFromQuery(luceneQuery)
} }
override fun findBankByNameOrCityForNonEmptyQuery(query: String): List<BankInfo> { override fun findBankByNameBankCodeOrCityForNonEmptyQuery(query: String): List<BankInfo> {
bankFinderWhileUpdatingIndex?.let { bankFinderWhileUpdatingIndex?.let {
return it.findBankByNameBankCodeOrCity(query) return it.findBankByNameBankCodeOrCity(query)
} }
@ -93,7 +93,9 @@ open class LuceneBankFinder(indexFolder: File) : BankFinderBase(), IBankFinder {
val luceneQuery = queries.createQueriesForSingleTerms(query.toLowerCase()) { singleTerm -> val luceneQuery = queries.createQueriesForSingleTerms(query.toLowerCase()) { singleTerm ->
listOf( listOf(
queries.fulltextQuery(BankInfoNameFieldName, singleTerm), queries.fulltextQuery(BankInfoNameFieldName, singleTerm),
queries.startsWith(BankInfoCityIndexedFieldName, singleTerm) queries.startsWith(BankInfoCityIndexedFieldName, singleTerm),
queries.startsWith(BankInfoBankCodeFieldName, singleTerm)
// TODO: add query for branchesInOtherCities
) )
} }
@ -190,6 +192,8 @@ open class LuceneBankFinder(indexFolder: File) : BankFinderBase(), IBankFinder {
fields.storedField(BankInfoPostalCodeFieldName, bank.postalCode), fields.storedField(BankInfoPostalCodeFieldName, bank.postalCode),
fields.nullableStoredField(BankInfoPinTanServerAddressFieldName, bank.pinTanAddress), fields.nullableStoredField(BankInfoPinTanServerAddressFieldName, bank.pinTanAddress),
fields.nullableStoredField(BankInfoPinTanVersionFieldName, bank.pinTanVersion) fields.nullableStoredField(BankInfoPinTanVersionFieldName, bank.pinTanVersion)
// TODO: index branchesInOtherCities
) )
bank.branchesInOtherCities.forEach { branchCity -> bank.branchesInOtherCities.forEach { branchCity ->