Solr и потребителски данни

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

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

Мисля за два подхода:

  1. Изтеглете статии от Solr и след това преминете през всяка статия, за да извлечете „статута на любимите“ на тази статия за този конкретен потребител от MySQL.

  2. Всеки път, когато даден потребител означи статия като предпочитана, добавете ИД на този потребител към многостойностна колона в Solr и проверете дали ИД на текущия потребител е в тази колона или не.

Не знам капацитета на колоната с много стойности... и също така не мисля, че вторият подход би бил "добра практика" (запазване на свързани с потребителя данни в индекс).

Какви други опции имам, ако има такива? Подход 2 правилен ли е?


person user3470707    schedule 20.08.2014    source източник


Отговори (1)


Бих избрал модифицирана версия на първата - тя ще запази специфични за потребителя данни, които няма да се използват за търсене извън индекса (въпреки че ако предвидите случай, в който искате да търсите любими статии, вероятно би било интересно поле да има в индекса) засега. Само за целите на показването, както в този случай, бих взел всички идентификатори, върнати от Solr, бих ги извлякъл в един SQL оператор от базата данни и след това бих задал стойностите на потребителския интерфейс в зависимост от това. Това е бързо и лесно решение.

Ако предвидите, че „търсене само в моите любими статии“ като случай на употреба, ще се опитам да вкарам тази информация и в индекса (или други филтриращи приложения за това дали конкретен потребител е добавил полето като любимо). Бих се опитал да избегна индексирането на нещо повече от потребителския идентификатор, който е избрал статията в този случай.

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

person MatsLindh    schedule 20.08.2014
comment
Съгласен съм... първото решение звучи много по-добре с една заявка, изпълнена в MySQL. - person user3470707; 21.08.2014
comment
Трябва да имате предвид, че даден потребител може да има голямо количество любими статии. В случай, че искате да извлечете всички статии, отбелязани от потребител със звезда, ще ви трябва голяма клауза с много article_ids. Това няма да върви добре със Solr. Следователно вашият подход (2) е по-подходящ. - person cheffe; 21.08.2014
comment
@cheffe Да, това е мотивът зад подход №2. Но във въпроса няма нищо за извличане само на любими статии, поради което го поставих като префикс ако вие ... Solr така или иначе може да се справи с доста директни търсения от идентификатори, но всичко зависи от действителния случай на употреба и налични числа. И двата подхода имат своите проблеми и силни страни. - person MatsLindh; 21.08.2014