У меня есть приложение MVC, которое мне нужно для поиска. Приложение является модульным, поэтому модулям должно быть легко регистрировать данные для индексации с помощью модуля поиска.
В настоящее время существует только быстрое временное решение, которое хорошо для гибкости, но скорость всегда была проблемой. Модули регистрируют модели (а также отношения и столбцы), по которым они хотели бы иметь возможность поиска. При поиске функция поиска запрашивает данные, используя эти отношения, и применяет Левенштейна, удаляет стоп-слова, выполняет замену символов и т. Д. Ясно, что это замедлится по мере увеличения объема данных, поэтому их нецелесообразно сохранять, поскольку они эффективно select * from x,y,z
, а затем просматривают данные.
Преимущество вышесказанного заключается в том, что существует прямая связь с моделью, которая нашла данные. Например, если Model_Product
что-то находит, я знаю, что в моем коде я могу использовать Model_Product::url()
, чтобы связать результат с соответствующим местоположением, или Model_Product::find(other data)
, чтобы показать, скажем, изображение или описание, если ключевое слово было найдено, например, в заголовке.
Еще одним преимуществом вышесказанного является то, что он уже специфичен для базы данных, поэтому его можно просто перебросить на виртуальный хост, и он работает.
Я читал о различных вариантах, и все они кажутся очень похожими, поэтому маловероятно, что люди смогут предложить «правильный» вариант, не провоцируя дискуссию или дебаты, но для протокола; из следующих вариантов, я склоняюсь к Solr. Я не высечен в камне, поэтому, если у кого-то есть какие-то советы, которыми они хотели бы поделиться, или другие варианты, на которые я мог бы взглянуть, это было бы здорово.
- Sphinx
- Lucene
- Solr - кажется, просто запускает Lucene как службу?
- Xapian
- ElasticSearch
Просматривая различные учебные пособия и руководства, все они кажутся относительно простыми в установке и настройке. В приведенном выше случае я могу заставить модули регистрировать путь к файлам конфигурации / моделям индекса поиска и заставить поисковик запускать их все через программу поиска x. Это создаст мои индексы и предоставит средства для запроса данных. Отлично.
Я не понимаю, как эти индексы связаны с другим моим кодом. Если я индексирую данные, выполняю поиск и, в свою очередь, нахожу результат, скажем, с помощью Solr, как мне узнать, как получить всю другую информацию, относящуюся к найденному биту?
Также может ли кто-нибудь подтвердить, нужен ли мне экземпляр любого из вышеперечисленных для каждого виртуального хоста? Это то, о чем я не могу найти много информации. Я бы предположил, что могу просто подключиться к одному экземпляру и сказать ему, какие данные актуальны? Это очень похоже на подключение к одному серверу СУБД с учетными данными x для базы данных y.
Конечно, я не так подробно читал по этому поводу, как обычно, потому что в данный момент я немного застрял в плане направления, и я бы предпочел не читать все обо всем, а попросить совета у тех, кто знает прежде чем я выберу определенный маршрут.
Изменить: Этот вопрос, кажется, склонил меня больше к Solr. Здесь также есть аналогичная ветка здесь с изрядное понимание Сфинкса.