При разработке поиска сайта, который я создаю, я решил пойти дешевым и быстрым способом и использовать Microsoft Sql Server для полнотекстового поиска, а не нечто более надежное, как Lucene.Net.
Одна из функций, которые я хотел бы иметь, - это соответствующие фрагменты документа, относящиеся к google-esque. Я быстро обнаружил, что определение "релевантных" фрагментов сложнее, чем я понял.
Я хочу выбрать фрагменты, основанные на плотности поискового запроса в найденном тексте. Поэтому, по сути, мне нужно найти самый поисковый термин в тексте. Где прохождение - какое-то произвольное количество символов (скажем 200, но это действительно неважно).
Моя первая мысль - использовать .IndexOf() в цикле и построить массив терминальных расстояний (вычесть индекс найденного термина из ранее найденного термина), то... что? Добавьте любые два, три, четыре, пять, последовательные элементы массива и используйте ту, которая имеет наименьшую сумму (следовательно, наименьшее расстояние между поисковыми запросами).
Это кажется грязным.
Есть ли установленный, лучший или более очевидный способ сделать это, чем то, что я придумал?