Имам MVC приложение, което трябва да мога да търся. Приложението е модулно, така че трябва да е лесно за модулите да регистрират данни за индексиране с модула за търсене.
В момента има само бързо временно решение, което е добре за гъвкавост, но скоростта винаги ще бъде проблем. Модулите регистрират модели (и връзки и колони), които биха искали да могат да се търсят. При търсене функционалността за търсене прави заявки за данни, като използва тези връзки и прилага Levenshtein, премахва стоп думи, прави замени на знаци и т.н. Ясно е, че това ще се забави с увеличаването на обема на данните, така че не е жизнеспособно да се запази, тъй като е ефективно select * from x,y,z
и след това мина чрез данните.
Ползата от горното е такава, че има пряка връзка с модела, който е намерил данните. Например, ако Model_Product
намери нещо, знам, че в моя код мога да използвам Model_Product::url()
, за да свържа резултата със съответното местоположение или Model_Product::find(other data)
, за да покажа, да кажем, изображението или описанието, ако ключовата дума е била намерена например в заглавието.
Друго предимство на горното е, че вече е специфично за базата данни и следователно може просто да бъде хвърлено на виртуален хост и работи.
Четох за различните варианти и всички те изглеждат много сходни, така че е малко вероятно хората да успеят да предложат „правилния“, без да предизвикат дискусия или дебат, но за протокола; от следните опции, Solr изглежда е тази, към която клоня. Не съм втвърден, така че ако някой има някакъв съвет, който би искал да сподели, или други опции, които мога да разгледам, ще бъде страхотно.
- Сфинкс
- Lucene
- Solr – изглежда просто стартира Lucene като услуга?
- Xapian
- ElasticSearch
Преглеждайки различни уроци и ръководства, всички те изглеждат относително лесни за настройване и конфигуриране. В случая по-горе мога да накарам модулите да регистрират пътя на конфигурационните файлове/моделите на индекса за търсене и да накарам търсещия да ги изпълни през програмата за търсене x. Това ще изгради моите индекси и ще предостави средствата, чрез които да се правят заявки за данни. Глоба.
Това, което не разбирам, е как някой от тези индекси е свързан с другия ми код. Ако индексирам данни, търся и на свой ред намеря резултат, да речем Solr, как да разбера как да получа цялата друга информация, свързана с намерения бит?
Също така някой може ли да потвърди дали ще трябва да имам екземпляр на някое от горните за всеки виртуален хост? Това е нещо, за което изглежда не мога да намеря много информация. Бих предположил, че мога просто да се свържа с един екземпляр и да му кажа какви данни са подходящи? Подобно на свързване към един DBMS сървър, с идентификационни данни x към база данни y.
Вярно е, че не съм прочел толкова подробно по този въпрос, колкото обикновено, защото в момента съм малко блокиран по отношение на посоката и предпочитам да не чета всичко за всичко, вместо да потърся съвет от онези, които знаят преди да поема по определен маршрут.
Редактиране: Този въпрос изглежда ме насочи повече към Solr. Има и подобна тема тук с добър поглед върху Сфинкса.