Комментарии 21
полная статья
В любом случае это нюансы. И, кстати, да, я не увидел большой разницы при использовании Dictionary и SortedDictionary. Но тут показалось мне более логичным использовать SortedDictionary.
больше всего смущает ситуацию с производительностью. Вы ее не измеряли? ведь автодолнение должно быть отзывчивым, а Левенштейн достаточно сложен.
И из текста, не очень понятно, как в итоге была решена проблема: (и решена ли вообще)
3) Названия сервисов имеют в своем составе более одного слова, то человек может просто не помнить, в каком именно порядке они идут.
я всегда мечтал, чтобы на сайтах поиск работал по camelhumps, как в ReSharper-е и IntelliJ IDEA :)
Пожалуйста :)
Производительность в консоле при 1000 наименований была в пределах 1 секунды, что меня вполне устроило, а на большее энтузиазма не хватило.
3 часть начинается со слов:
Со словами, как и поисковой единицей, вроде разобрались, теперь переходим к фразам.
Не пробовал. Вечером ради интереса посмотрю. Но тут на первый план выходит адекватность данных.
Алгоритм предназначен для поиска по названиям, а не по текстам.
То такие поисковые запросы можно отсекать до попытки поиска на них.
Тут я еще не поднял вопрос о том как отсекать результаты при выводы на странице "со всеми совпадениями". И вот на эту тему можно похолеварить.:)
А для русского я составлю сам по наитию:
«ыий», «эе», «ая», «оёе», «ую», «шщ», «оа», «йо»
Что за группа «йо»? Тем более, что и «й» и «о» уже входят в другие группы.
Группа "йо" взялась с транскрипций расскоязычных звуков. Буква ё разлогается на звук "йо". Но если подумать, то Вы правы. Перехода "й" в "о" я не смог придумаль или быстро нагуглить.
Одна буквы может входить в несколько груп например sxz и csz.
Просто так проще их обдумывать и править. И поэтому мы и преобразуем эти фонетические группы в новый справочник который и используем потом в коде
С одной стороны — да.
по слову «Кометика» удалось найти «Косметика». Но поиск упорно выдавал только одно слово и всё. Хотя я, по идее, просил не меньше 1000 результатов
indexSearcher.Search(query, 1000)
Дальше больше, когда я сократил слово до «Ком», результатов вообще не было.
Хотя по идее используется именно нечеткий поиск
Term term1 = new Term(«line», term);
Query query = new FuzzyQuery(term1);
Таким образом получается, что — да он позволяет находить слова с ошибками, но не делать поисковый запрос.
Да и те примеры которые я находил относят именно к поиску на тексте, а не по названиям.
В общем штука интересная, но настраивать и разбираться в документации дольше, чем сделать самому с нуля — это не удобно.
Как то так. Но спасибо за библиотеку.
В oracle например есть utl_match.jaro_winkler(s1,s2)
)
Нечеткий поиск по названиям