Some API fix:
now /find/<text>?strong=<0,1> is right route, 'find' always returns array
This commit is contained in:
@@ -46,10 +46,9 @@ class FiasFactory:
|
||||
pattern = re.compile(r"[A-za-zА-Яа-я \-,.#№]+")
|
||||
assert pattern.match(param), "Invalid parameter value"
|
||||
|
||||
# text - строка поиска
|
||||
# strong - строгий поиск (True) или "мягкий" (False) (с допущением ошибок, опечаток)
|
||||
# Строгий используется при импорте из внешних систем (автоматически), где ошибка критична
|
||||
|
||||
# text - строка поиска
|
||||
# strong - строгий поиск (True) или "мягкий" (False) (с допущением ошибок, опечаток)
|
||||
# Строгий используется при импорте из внешних систем (автоматически), где ошибка критична
|
||||
def find(self, text, strong=False):
|
||||
try:
|
||||
text = urllib.parse.unquote(str(text))
|
||||
|
||||
@@ -174,18 +174,18 @@ class SphinxSearch:
|
||||
cort=i))
|
||||
|
||||
# При строгом поиске нам надо еще добавить fuzzy и выбрать самое большое значение при отклонении
|
||||
# выше заданного
|
||||
# выше заданного, по сути переопределяем ratio
|
||||
if strong:
|
||||
for result in results:
|
||||
result['strong_rank'] = violet_ratio(text, result['text'].lower())
|
||||
result['ratio'] = violet_ratio(text, result['text'].lower())
|
||||
|
||||
# Сортируем по убыванию признака
|
||||
results.sort(key=lambda x: x['strong_rank'], reverse=True)
|
||||
results.sort(key=lambda x: x['ratio'], reverse=True)
|
||||
|
||||
# Если подряд два одинаково релеватных результата - это плохо, на автомат такое отдавать нельзя
|
||||
if abs(results[0]['strong_rank'] - results[1]['strong_rank']) == 0.0:
|
||||
if abs(results[0]['ratio'] - results[1]['ratio']) == 0.0:
|
||||
raise FiasException("No matches")
|
||||
else:
|
||||
return results[0]
|
||||
results = [results[0]]
|
||||
|
||||
return results
|
||||
|
||||
Reference in New Issue
Block a user