Как мога да свържа индексите за търсене с моделите в MVC?

Имам MVC приложение, което трябва да мога да търся. Приложението е модулно, така че трябва да е лесно за модулите да регистрират данни за индексиране с модула за търсене.

В момента има само бързо временно решение, което е добре за гъвкавост, но скоростта винаги ще бъде проблем. Модулите регистрират модели (и връзки и колони), които биха искали да могат да се търсят. При търсене функционалността за търсене прави заявки за данни, като използва тези връзки и прилага Levenshtein, премахва стоп думи, прави замени на знаци и т.н. Ясно е, че това ще се забави с увеличаването на обема на данните, така че не е жизнеспособно да се запази, тъй като е ефективно select * from x,y,z и след това мина чрез данните.

Ползата от горното е такава, че има пряка връзка с модела, който е намерил данните. Например, ако Model_Product намери нещо, знам, че в моя код мога да използвам Model_Product::url(), за да свържа резултата със съответното местоположение или Model_Product::find(other data), за да покажа, да кажем, изображението или описанието, ако ключовата дума е била намерена например в заглавието.

Друго предимство на горното е, че вече е специфично за базата данни и следователно може просто да бъде хвърлено на виртуален хост и работи.

Четох за различните варианти и всички те изглеждат много сходни, така че е малко вероятно хората да успеят да предложат „правилния“, без да предизвикат дискусия или дебат, но за протокола; от следните опции, Solr изглежда е тази, към която клоня. Не съм втвърден, така че ако някой има някакъв съвет, който би искал да сподели, или други опции, които мога да разгледам, ще бъде страхотно.

Преглеждайки различни уроци и ръководства, всички те изглеждат относително лесни за настройване и конфигуриране. В случая по-горе мога да накарам модулите да регистрират пътя на конфигурационните файлове/моделите на индекса за търсене и да накарам търсещия да ги изпълни през програмата за търсене x. Това ще изгради моите индекси и ще предостави средствата, чрез които да се правят заявки за данни. Глоба.

Това, което не разбирам, е как някой от тези индекси е свързан с другия ми код. Ако индексирам данни, търся и на свой ред намеря резултат, да речем Solr, как да разбера как да получа цялата друга информация, свързана с намерения бит?

Също така някой може ли да потвърди дали ще трябва да имам екземпляр на някое от горните за всеки виртуален хост? Това е нещо, за което изглежда не мога да намеря много информация. Бих предположил, че мога просто да се свържа с един екземпляр и да му кажа какви данни са подходящи? Подобно на свързване към един DBMS сървър, с идентификационни данни x към база данни y.

Вярно е, че не съм прочел толкова подробно по този въпрос, колкото обикновено, защото в момента съм малко блокиран по отношение на посоката и предпочитам да не чета всичко за всичко, вместо да потърся съвет от онези, които знаят преди да поема по определен маршрут.

Редактиране: Този въпрос изглежда ме насочи повече към Solr. Има и подобна тема тук с добър поглед върху Сфинкса.


person Ben Swinburne    schedule 20.05.2013    source източник


Отговори (1)


ОТКАЗ ОТ ОТГОВОРНОСТ: Мога да говоря само за Lucene/Solr и, вярвам, ElasticSearch, тъй като знам, че е базиран на Lucene. Други могат или не могат да работят по същия начин.

Ако индексирам данни, търся и на свой ред намеря резултат, да речем Solr, как да разбера как да получа цялата друга информация, свързана с намерения бит?

Можете да съхранявате всякакви допълнителни данни, които искате, напр. ключ на базата данни, сочещ към определен ред в базата данни. Lucene/Solr също може да ви помогне да намерите относителна информация, напр. ако управлявате магазин за DVD под наем и потребителят е написал грешно име на филм, Lucene ще разбере това вместо вас и (за разлика от DB) все пак ще посочи най-близките алтернативи. Можете също да предоставите съвети, като увеличите определени полета по време на индексиране или заявка. Има специални разширения за геопространствено търсене и т.н. И очевидно можете да предоставите вашите притежавайте, ако имате нужда.

Също така някой може ли да потвърди дали ще трябва да имам екземпляр на някое от горните за всеки виртуален хост?

Lucene е библиотека от ниско ниво и ще трябва да присъства във всяка JVM, която изпълнявате. Solr (изграден върху Lucene) е HTTP сървър. Можете да му се обадите от толкова клиенти, колкото искате. Още опции за мащабиране са обяснени тук.

person mindas    schedule 20.05.2013
comment
за добавяне: ElasticSearch, подобно на Solr, също е http-сървър. - person Geert-Jan; 20.05.2013
comment
Как бих могъл да посоча, да речем име на конкретен модел или информация, която не е намерена в набора от данни, но относно набора от данни с индексираната информация. Например, ако индексирам моята products таблица, бих искал индексът да може да препраща обратно към Model_Product, така че да знам идентификатора на реда и следователно да мога да използвам Model_Product, за да получа информация, която е уместна за моите резултати, но не е задължително да се намери в този конкретен ред, т.е. свързана таблица. Все още не успях да намеря информация как да направя това. - person Ben Swinburne; 23.05.2013
comment
Трябва да денормализирате вашата структура от данни в плосък документ. С други думи, трябва да съхраните или външен ключ към друг обект, така че да може да бъде извличан, или да индексирате съответните полета на обект, или и двете. - person mindas; 23.05.2013
comment
Мога лесно да съхранявам външния ключ и т.н., това е добре, защото е в набора от данни. Това, от което всъщност се нуждая, е да мога да съхранявам допълнителна информация, която не може да бъде намерена чрез заявка, но автоматично се свързва с тези данни. Например бих могъл да направя select * from products, за да създам колекция от продукти, но когато извличам тези данни, трябва да знам от коя таблица например идват данните. Има ли начин да кажа select * from products + some static data not in the database? - person Ben Swinburne; 23.05.2013
comment
Това определено е възможно и зависи от това как реализирате интеграцията си със Solr. Заявка за индексиране на документ може да съдържа толкова допълнителна информация, колкото е необходима, така че можете да добавите своето поле product_source. Solr всъщност не се интересува откъде идват тези данни - нека да е база данни, или вашия код, или нещо друго. - person mindas; 23.05.2013
comment
Мъча се да намеря къде това е документирано, мога да намеря само полета за съпоставяне към данни от заявка, а не данни от външен източник. Къде е документирано това, за да знам как да го направя? Сигурен съм, че концептуално е възможно, но не мога да намеря как. наздраве - person Ben Swinburne; 23.05.2013
comment
Урокът за Solr обхваща това: lucene.apache.org/solr/4_3_0/tutorial.html (вижте глава за индексиране на данни). Можете също така да разгледате wiki.apache.org/solr/DataImportHandler - person mindas; 23.05.2013