Доброго времени,
задача простая: искать с неким процентом совпадения, с расчетом на возможные опечатки. Текущая реализация такая:
_client.Search<SearchObject>(body =>
body.Query(q => q.Fuzzy(fz => fz
.OnField(f => f.PropertyValue)
.Value(key.ToLowerInvariant())
.PrefixLength(0)
.MinSimilarity(similarity)))).Size(maxResultCount));
Почему так? Пробовал fuzzy_like_this, он почему-то долго очень работает. Вопрос вот в чем: как считается подобие для строк разной длины? Ну например:
"водный" и "вадный" - расстояние по Левенштейну 1, если мы ищем с min_similarity = 0.5, если я правильно понимаю, работает такая формула: length("водный") * 0.5 = 3, т.е. расстояние до 3 будет находить.
НО! если в индексе лежит строка "Государственная академия водного транспорта" - расстояние будет намного больше, и поиск ее не находит! Хотя степень подобия фрагмента этой строки в общем-то такая же. Это дико не практично: если уменьшать similarity, то на коротких строках будет находить все подряд, строки в поисковых объектах очень разной длины, как отвязать от этой длины поиск, и заставить его одинаково хорошо искать по подстроке в строке любой длины, с некоторым люфтом подобия?
Заранее спасибо за помощь!