Я создаю автозаполнение, которое должно будет быстро запросить более 10 миллионов слов/фраз и столкнуться с некоторыми проблемами. Моя первая идея состояла в том, чтобы пройти через какую-то структуру trie/trernary tree, но это строго префиксное совпадение, что недостаточно для моего приложения (я хочу полное инфиксное сопоставление). Затем я перешел к некоторым более крупным решениям, SqlServer FullText Indexing, Lucene, Solr, Sphinx, но Lucent и SqlServer FullText Indexing на самом деле не являются полнотекстовыми, а префикс отличными функциями (soundex, близость и т. Д.). Я пытался подумать о том, как может помочь редактирование расстояния Левенштейна, но не может найти способ быть как по крайней мере разумным, так и поддерживать слова с большими расстояниями редактирования (т. Е. Google и ogl. Расстояние редактирования 3, но 3 путь к высокому порогу - общий случай).Быстрый поиск Infix
Вопрос в том, как работают такие электростанции, как Google/bing и т. Д.? Они просто грубо заставляют это после бит? Я не думаю, что нет, но я не могу найти поддержки.
Любая помощь будет оценена!
Думаю, подход N-грамм может помочь. Тогда есть http://sna-projects.com/cleo/, который делает то, что вам нужно. – aitchnyu
«Люцен не полный текст»? Можете ли вы рассказать об этом? Кажется, у вас есть определение, отличное от того, которое использует большинство людей. Кроме того, что вы пробовали с каждым из Solr/Lucene/Sphinx/etc? Знаете ли вы, что Solr имеет конкретный компонент для работы с автозаполнением? –
Я использую fulltext для обозначения того, что если я ищу «* talli *», то соответствует «metallica». под обоими sqlserver и lucene это не так. – hermitt