добавить индекс для хранения количества комментариев

14 messages Options
Embed this post
Permalink
besja

добавить индекс для хранения количества комментариев

Reply Threaded More More options
Print post
Permalink
Есть задача вывести последние N популярных элементов. В качестве критерия популярности решено использовать количество комментариев (так как продукта для выставления рейтинга я не нашла). Нужно как-то сделать запрос к портал каталог, и указать сортировку по кол-ву комментариев. Соответственно, встает вопрос как сделать добавить индекс Кол-во комментариев. Объекты все - стандартные... Как получить кол-во комментариев, в принципе понятно, как добавить индекс - тоже. Остается вопрос, как добавить метод для подсчета комментариев ко всем базовым элементам. Возможно, можно через monkey patch, но это чисто интуитивно, так как не разу не пользовалась таким способом.
Еще делала всякие штуки с помощью schema.extender, схему удается расширить или изменить, а вот добавить метод, который съест портал каталог никак.
 Вот. Может быть будут какие-нибудь соображения по этому поводу?
Спасибо всем заранее)
Ирина
--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

Юрий Поляков

Re: добавить индекс для хранения количества комментариев

Reply Threaded More More options
Print post
Permalink
Создайте python_script с кодом подсчета количества комментариев у
контекста, а затем индекс, у которого в качестве индексируемого метода
укажите свой скрипт.

При индексации, скрипт будет вызываться в контексте каждого объекта, а
результат храниться в метадате. Кстати не забудьте ее добавить, если
вам нужно не только сортировать по этому параметру, но и получать его
значение - по индексу ведется сортировка и т.д., а значения лежат в
метадате.


2009/7/19 Бессарабова Ирина <[hidden email]>:
> Есть задача вывести последние N популярных элементов. В качестве критерия популярности решено использовать количество комментариев (так как продукта для выставления рейтинга я не нашла). Нужно как-то сделать запрос к портал каталог, и указать сортировку по кол-ву комментариев. Соответственно, встает вопрос как сделать добавить индекс Кол-во комментариев. Объекты все - стандартные... Как получить кол-во комментариев, в принципе понятно, как добавить индекс - тоже. Остается вопрос, как добавить метод для подсчета комментариев ко всем базовым элементам. Возможно, можно через monkey patch, но это чисто интуитивно, так как не разу не пользовалась таким способом.
> Еще делала всякие штуки с помощью schema.extender, схему удается расширить или изменить, а вот добавить метод, который съест портал каталог никак.
>  Вот. Может быть будут какие-нибудь соображения по этому поводу?
> Спасибо всем заранее)
> Ирина
> >
>



--
  Юрий Поляков
    +7 (916) 806-00-55
    [hidden email]

--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

besja

Re: добавить индекс для хранения количества комментариев

Reply Threaded More More options
Print post
Permalink
О! Спасибо)

19.07.09, 23:30, "Юрий Поляков" <[hidden email]>:

> Создайте python_script с кодом подсчета количества комментариев у
> контекста, а затем индекс, у которого в качестве индексируемого метода
> укажите свой скрипт.
> При индексации, скрипт будет вызываться в контексте каждого объекта, а
> результат храниться в метадате. Кстати не забудьте ее добавить, если
> вам нужно не только сортировать по этому параметру, но и получать его
> значение - по индексу ведется сортировка и т.д., а значения лежат в
> метадате.
> 2009/7/19 Бессарабова Ирина <[hidden email]>:
> > Есть задача вывести последние N популярных элементов. В качестве критерия популярности решено использовать количество комментариев (так как продукта для выставления рейтинга я не нашла). Нужно как-то сделать запрос к портал каталог, и указать сортировку по кол-ву комментариев. Соответственно, встает вопрос как сделать добавить индекс Кол-во комментариев. Объекты все - стандартные... Как получить кол-во комментариев, в принципе понятно, как добавить индекс - тоже. Остается вопрос, как добавить метод для подсчета комментариев ко всем базовым элементам. Возможно, можно через monkey patch, но это чисто интуитивно, так как не разу не пользовалась таким способом.
> > Еще делала всякие штуки с помощью schema.extender, схему удается расширить или изменить, а вот добавить метод, который съест портал каталог никак.
> >  Вот. Может быть будут какие-нибудь соображения по этому поводу?
> > Спасибо всем заранее)
> > Ирина
> > >
> >
--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

Michael Krishtopa-2

Re: добавить индекс для хранения количества комментариев

Reply Threaded More More options
Print post
Permalink
In reply to this post by besja
Бессарабова Ирина wrote:
> Есть задача вывести последние N популярных элементов. В качестве критерия популярности решено использовать количество комментариев (так как продукта для выставления рейтинга я не нашла).
iqpp.plone.rating
<http://heddex.vds.colocall.com:8090/fammagazine/portal_quickinstaller/iqpp.plone.rating/manage_workspace>


--
Best regards, Michael Krishtopa
Plone design and themes development

--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

Michael Krishtopa-2

Re: добавить индекс для хранения количества комментариев

Reply Threaded More More options
Print post
Permalink
...
> iqpp.plone.rating
>  
Пардон, не заметил как почтовик и ссылку втулил :)

Это продукт EasyRating
http://plone.org/products/easyrating

Последняя версия 2.5.1 beta 1 работает под Plone 3.


--
Best regards, Michael Krishtopa
Plone design and themes development

--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

besja

Re: добавить индекс для хранения количества комментариев

Reply Threaded More More options
Print post
Permalink
Да, я поняла) Просто, когда я смотрела, меня смутила beta. Проект нужно сделать довольно быстро и времени на допиливание совсем нет.  Но раз работает, то поставим) Спасибо.
Вопрос по комментам:
Индекс я добавлю. Но будет ли обновляться его значение при добавлении комментария?   Индекс же привязан к родительскому объекту...


20.07.09, 10:35, "Michael Krishtopa" <[hidden email]>:

> ...
> > iqpp.plone.rating
> >  
> Пардон, не заметил как почтовик и ссылку втулил :)
> Это продукт EasyRating
> http://plone.org/products/easyrating
> Последняя версия 2.5.1 beta 1 работает под Plone 3.

--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

Юрий Поляков

Re: добавить индекс для хранения количества комментариев

Reply Threaded More More options
Print post
Permalink
> Вопрос по комментам:
> Индекс я добавлю. Но будет ли обновляться его значение при добавлении комментария?   Индекс же привязан к родительскому объекту...

Нет, не будет. Нужно дергать .reindexObject() для объекта при
добавлении коммента.


>
>
> 20.07.09, 10:35, "Michael Krishtopa" <[hidden email]>:
>
>> ...
>> > iqpp.plone.rating
>> >
>> Пардон, не заметил как почтовик и ссылку втулил :)
>> Это продукт EasyRating
>> http://plone.org/products/easyrating
>> Последняя версия 2.5.1 beta 1 работает под Plone 3.
>
> >
>



--
  Юрий Поляков
    +7 (916) 806-00-55
    [hidden email]

--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

Mikhail Kashkin-2

Re: добавить индекс для хранения количества комментариев

Reply Threaded More More options
Print post
Permalink
Вот как раз хотел на это обратить  
внимание. У комментариев другое  
хранилище, соответственно добавление  
новых не модифицируют объект к  
которому они относятся.

Еще один нюанс, комментарии хранятся  
как вложенные объекты, значит обходить  
их, если правильно помню, придется  
рекурсивно. Если это важная часть  
функциональности проекта, то может  
получится так что сайт будет очень  
сильно тормозить при большом  
количестве комментариев. В общем  
предупредил.

--
Mikhail Kashkin
http://www.devcult.ru/
http://www.mediavirus.ru/

On Jul 20, 2009, at 9:53 AM, Юрий Поляков wrote:

>> Вопрос по комментам:
>> Индекс я добавлю. Но будет ли  
>> обновляться его значение при  
>> добавлении комментария?   Индекс же  
>> привязан к родительскому объекту...
>
> Нет, не будет. Нужно дергать .reindexObject()  
> для объекта при
> добавлении коммента.
>


--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

Юрий Поляков

Re: добавить индекс для хранения количества комментариев

Reply Threaded More More options
Print post
Permalink
> Еще один нюанс, комментарии хранятся
> как вложенные объекты,

Не совсем так. Комменты лежат в дискашн-туле линейно. Это можно
увидеть в коде их выборки.

 значит обходить
> их, если правильно помню, придется
> рекурсивно. Если это важная часть
> функциональности проекта, то может
> получится так что сайт будет очень
> сильно тормозить при большом
> количестве комментариев. В общем
> предупредил.

Но в целом все верно, дергать каждый раз переиндексацию - само по себе
довольно тяжелая операция, не говоря уже о том, что при интенсивном
комментировании база начнет быстро распухать.


> --
> Mikhail Kashkin
> http://www.devcult.ru/
> http://www.mediavirus.ru/
>
> On Jul 20, 2009, at 9:53 AM, Юрий Поляков wrote:
>
>>> Вопрос по комментам:
>>> Индекс я добавлю. Но будет ли
>>> обновляться его значение при
>>> добавлении комментария?   Индекс же
>>> привязан к родительскому объекту...
>>
>> Нет, не будет. Нужно дергать .reindexObject()
>> для объекта при
>> добавлении коммента.
>>
>
>
> >
>



--
  Юрий Поляков
    +7 (916) 806-00-55
    [hidden email]

--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

besja

Re: добавить индекс для хранения количества комментариев

Reply Threaded More More options
Print post
Permalink
А нет какого-нибудь метода, который позволяет изменить значение конкретного индекса? Например, если бы он был, то можно было бы тупо добавлять /удалять 1 к его значению?  


20.07.09, 11:35, "Юрий Поляков" <[hidden email]>:

> > Еще один нюанс, комментарии хранятся
> > как вложенные объекты,
> Не совсем так. Комменты лежат в дискашн-туле линейно. Это можно
> увидеть в коде их выборки.
>  значит обходить
> > их, если правильно помню, придется
> > рекурсивно. Если это важная часть
> > функциональности проекта, то может
> > получится так что сайт будет очень
> > сильно тормозить при большом
> > количестве комментариев. В общем
> > предупредил.
> Но в целом все верно, дергать каждый раз переиндексацию - само по себе
> довольно тяжелая операция, не говоря уже о том, что при интенсивном
> комментировании база начнет быстро распухать.
> > --
> > Mikhail Kashkin
> > http://www.devcult.ru/
> > http://www.mediavirus.ru/
> >
> > On Jul 20, 2009, at 9:53 AM, Юрий Поляков wrote:
> >
> >>> Вопрос по комментам:
> >>> Индекс я добавлю. Но будет ли
> >>> обновляться его значение при
> >>> добавлении комментария?   Индекс же
> >>> привязан к родительскому объекту...
> >>
> >> Нет, не будет. Нужно дергать .reindexObject()
> >> для объекта при
> >> добавлении коммента.
> >>
> >
> >
> > >
> >

--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

Юрий Поляков

Re: добавить индекс для хранения количества комментариев

Reply Threaded More More options
Print post
Permalink
Скажу прямо (чтобы сейчас не пуститься в размышления по поводу
внутреннего устройства индексов каталога и того, насколько он, как
средство, подходит для решения данной задачи... :)

для вашей задачи сейчас лучшим решением будет подключиться к mysql и
делать все это уже там... увеличивайте значение количества комментов
при публикации коммента в простенькой табличке, и оттуда же получайте
отсортированный список объектов.

2009/7/20 Бессарабова Ирина <[hidden email]>:

> А нет какого-нибудь метода, который позволяет изменить значение конкретного индекса? Например, если бы он был, то можно было бы тупо добавлять /удалять 1 к его значению?
>
>
> 20.07.09, 11:35, "Юрий Поляков" <[hidden email]>:
>
>> > Еще один нюанс, комментарии хранятся
>> > как вложенные объекты,
>> Не совсем так. Комменты лежат в дискашн-туле линейно. Это можно
>> увидеть в коде их выборки.
>>  значит обходить
>> > их, если правильно помню, придется
>> > рекурсивно. Если это важная часть
>> > функциональности проекта, то может
>> > получится так что сайт будет очень
>> > сильно тормозить при большом
>> > количестве комментариев. В общем
>> > предупредил.
>> Но в целом все верно, дергать каждый раз переиндексацию - само по себе
>> довольно тяжелая операция, не говоря уже о том, что при интенсивном
>> комментировании база начнет быстро распухать.
>> > --
>> > Mikhail Kashkin
>> > http://www.devcult.ru/
>> > http://www.mediavirus.ru/
>> >
>> > On Jul 20, 2009, at 9:53 AM, Юрий Поляков wrote:
>> >
>> >>> Вопрос по комментам:
>> >>> Индекс я добавлю. Но будет ли
>> >>> обновляться его значение при
>> >>> добавлении комментария?   Индекс же
>> >>> привязан к родительскому объекту...
>> >>
>> >> Нет, не будет. Нужно дергать .reindexObject()
>> >> для объекта при
>> >> добавлении коммента.
>> >>
>> >
>> >
>> > >
>> >
>
> >
>



--
  Юрий Поляков
    +7 (916) 806-00-55
    [hidden email]

--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

besja

Re: добавить индекс для хранения количества комментариев

Reply Threaded More More options
Print post
Permalink
В итоге порешили, что ZODB не подходит для решения такой распространенной задачи ((( Вариант с простенькой таблицой имеет минусы. Главное - что мне может захотеться (читай заказчику захочется) вдруг выводить не все популярные объекты, а за период... Или только объекты типа Новости и т. д.
Все-таки мне кажется, что более-менее подходящий вариант, хранить все в ZODB, обращаться к портал каталогу с запросом на поиск и переиндексировать родительский объект  при добавлении/удалении комментария...  



20.07.09, 13:15, "Юрий Поляков" <[hidden email]>:

> Скажу прямо (чтобы сейчас не пуститься в размышления по поводу
> внутреннего устройства индексов каталога и того, насколько он, как
> средство, подходит для решения данной задачи... :)
> для вашей задачи сейчас лучшим решением будет подключиться к mysql и
> делать все это уже там... увеличивайте значение количества комментов
> при публикации коммента в простенькой табличке, и оттуда же получайте
> отсортированный список объектов.
> 2009/7/20 Бессарабова Ирина <[hidden email]>:
> > А нет какого-нибудь метода, который позволяет изменить значение конкретного индекса? Например, если бы он был, то можно было бы тупо добавлять /удалять 1 к его значению?
> >
> >
> > 20.07.09, 11:35, "Юрий Поляков" <[hidden email]>:
> >
> >> > Еще один нюанс, комментарии хранятся
> >> > как вложенные объекты,
> >> Не совсем так. Комменты лежат в дискашн-туле линейно. Это можно
> >> увидеть в коде их выборки.
> >>  значит обходить
> >> > их, если правильно помню, придется
> >> > рекурсивно. Если это важная часть
> >> > функциональности проекта, то может
> >> > получится так что сайт будет очень
> >> > сильно тормозить при большом
> >> > количестве комментариев. В общем
> >> > предупредил.
> >> Но в целом все верно, дергать каждый раз переиндексацию - само по себе
> >> довольно тяжелая операция, не говоря уже о том, что при интенсивном
> >> комментировании база начнет быстро распухать.
> >> > --
> >> > Mikhail Kashkin
> >> > http://www.devcult.ru/
> >> > http://www.mediavirus.ru/
> >> >
> >> > On Jul 20, 2009, at 9:53 AM, Юрий Поляков wrote:
> >> >
> >> >>> Вопрос по комментам:
> >> >>> Индекс я добавлю. Но будет ли
> >> >>> обновляться его значение при
> >> >>> добавлении комментария?   Индекс же
> >> >>> привязан к родительскому объекту...
> >> >>
> >> >> Нет, не будет. Нужно дергать .reindexObject()
> >> >> для объекта при
> >> >> добавлении коммента.
> >> >>
> >> >
> >> >
> >> > >
> >> >
> >
> > >
> >

--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

Юрий Поляков

Re: добавить индекс для хранения количества комментариев

Reply Threaded More More options
Print post
Permalink
С точки зрения простоты и быстроты да.

> Все-таки мне кажется, что более-менее подходящий вариант, хранить все в ZODB, обращаться к портал каталогу с запросом на поиск и переиндексировать родительский объект  при добавлении/удалении комментария...
>
>
>
> 20.07.09, 13:15, "Юрий Поляков" <[hidden email]>:
>
>> Скажу прямо (чтобы сейчас не пуститься в размышления по поводу
>> внутреннего устройства индексов каталога и того, насколько он, как
>> средство, подходит для решения данной задачи... :)
>> для вашей задачи сейчас лучшим решением будет подключиться к mysql и
>> делать все это уже там... увеличивайте значение количества комментов
>> при публикации коммента в простенькой табличке, и оттуда же получайте
>> отсортированный список объектов.
>> 2009/7/20 Бессарабова Ирина <[hidden email]>:
>> > А нет какого-нибудь метода, который позволяет изменить значение конкретного индекса? Например, если бы он был, то можно было бы тупо добавлять /удалять 1 к его значению?
>> >
>> >
>> > 20.07.09, 11:35, "Юрий Поляков" <[hidden email]>:
>> >
>> >> > Еще один нюанс, комментарии хранятся
>> >> > как вложенные объекты,
>> >> Не совсем так. Комменты лежат в дискашн-туле линейно. Это можно
>> >> увидеть в коде их выборки.
>> >>  значит обходить
>> >> > их, если правильно помню, придется
>> >> > рекурсивно. Если это важная часть
>> >> > функциональности проекта, то может
>> >> > получится так что сайт будет очень
>> >> > сильно тормозить при большом
>> >> > количестве комментариев. В общем
>> >> > предупредил.
>> >> Но в целом все верно, дергать каждый раз переиндексацию - само по себе
>> >> довольно тяжелая операция, не говоря уже о том, что при интенсивном
>> >> комментировании база начнет быстро распухать.
>> >> > --
>> >> > Mikhail Kashkin
>> >> > http://www.devcult.ru/
>> >> > http://www.mediavirus.ru/
>> >> >
>> >> > On Jul 20, 2009, at 9:53 AM, Юрий Поляков wrote:
>> >> >
>> >> >>> Вопрос по комментам:
>> >> >>> Индекс я добавлю. Но будет ли
>> >> >>> обновляться его значение при
>> >> >>> добавлении комментария?   Индекс же
>> >> >>> привязан к родительскому объекту...
>> >> >>
>> >> >> Нет, не будет. Нужно дергать .reindexObject()
>> >> >> для объекта при
>> >> >> добавлении коммента.
>> >> >>
>> >> >
>> >> >
>> >> > >
>> >> >
>> >
>> > >
>> >
>
> >
>



--
  Юрий Поляков
    +7 (916) 806-00-55
    [hidden email]

--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---

Mikhail Kashkin-2

Re: добавить индекс для хранения количества комментариев

Reply Threaded More More options
Print post
Permalink
In reply to this post by besja
Перефразируя дабы расставить акценты:

- При высокой интенсивности  
комментирования и большом объеме  
контента на сайте лучше выделить  
построение индексов во внешнее  
хранилище.
- В качестве прототипа текущие  
возможности позволяют реализовать  
функционал простым и быстрым способом.


--
Mikhail Kashkin
http://www.devcult.ru/
http://www.mediavirus.ru/

On Jul 20, 2009, at 12:54 PM, Бессарабова Ирина wrote:

> В итоге порешили, что ZODB не подходит  
> для решения такой распространенной  
> задачи ((( Вариант с простенькой  
> таблицой имеет минусы. Главное - что  
> мне может захотеться (читай заказчику  
> захочется) вдруг выводить не все  
> популярные объекты, а за период... Или  
> только объекты типа Новости и т. д.
> Все-таки мне кажется, что более-менее  
> подходящий вариант, хранить все в ZODB,  
> обращаться к портал каталогу с  
> запросом на поиск и  
> переиндексировать родительский  
> объект  при добавлении/удалении  
> комментария...


--~--~---------~--~----~------------~-------~--~----~
Russian Plone Group http://plone.org.ru/
Для отправки сообщений [hidden email]
Новые участники контролируются
Архив и настройки подписки http://groups.google.com/group/plone-ru
-~----------~----~----~----~------~----~------~--~---