[Plone-IT] zcatalog: da mysql a keywordindex

Stefano Guglia stefano.guglia a icgeb.org
Gio 26 Feb 2009 12:01:18 UTC


Il Wednesday 25 February 2009 17:03:40 Yuri ha scritto:
> Stefano Guglia ha scritto:
> > Il Tuesday 24 February 2009 10:06:23 Yuri ha scritto:
> >> Stefano Guglia ha scritto:
> >>> Il Monday 23 February 2009 17:03:40 Yuri ha scritto:
> >>>> Stefano Guglia ha scritto:
> >>>>> Salve a tutti. Sono tornato su un vecchio problema e ho dei dubbi.
> >>>>>
> >>>>> Ho la necessita' di indicizzare un recordset (fin qui tutto bene) e
> >>>>> una stringa di valori separati da virgola come keywords in un
> >>>>> keywordindex di zcatalog.
> >>>>> Tali valori provengono da un singolo campo text mysql in questa
> >>>>> forma: ['valore1','valore2'].
> >>>>> problema: a cose fatte, andando a vedere il manage_objectInformation
> >>>>> di uno qualsiasi degli oggetti in portal_catalog:
> >>>>>
> >>>>> Metadata Contents
> >>>>> ...
> >>>>> id    123456789
> >>>>> MioKwIndex   ['valore1','valore2']
> >>>>> ...
> >>>>> Index Contents
> >>>>> ...
> >>>>> id    123456789
> >>>>> MioKwIndex  ["['valore1','valore2']"]
> >>>>> ...
> >>>>>
> >>>>> cioe' il contenuto del campo mysql non viene trattato come lista ma,
> >>>>> legittimamente, come stringa e quindi inserito come valore singolo.
> >>>>
> >>>> devi indicizzare uno script che ritorni il valore trasformato in lista
> >>>> (o diviso da spazio), ad esempio, e non il valore in se.
> >>>
> >>> grazie. Non mi e' pero' chiaro..espongo il caso pratico:
> >>>
> >>> for dati in context.query_05:
> >>>  oggetto=container.virtual_url_path() + '/miadestinazione'
> >>>  my_catalog.catalog_object(dati,oggetto)
> >>
> >> In questo caso devi cambiare dati. Il keyword index presuppone una
> >> stringa separata da spazi, se non sbaglio. Quindi invece di
> >>
> >> ['ciao','bello']
> >>
> >> devi passare
> >>
> >> ciao bello
> >
> > purtroppo niente da fare:
> >
> > ...
> > "valore1 valore2" AS MioKwIndex
> > ...
> > passa esattamente quello..una stringa. Il risultato in MioKwIndex e' una
> > singola chiave, indicizzata come ['valore1 valore2'] e non, come
> > dovrebbe, ['valore1','valore2']  uffffff...
> >
> > Non vorrei trovarmi a riscrivere il codice (ma come?) solo per dover
> > aggiungere al quicksearch (che peraltro funziona benissimo) un form di
> > ricerca a lista predefinita.
> >
> > saluti a tutti..
>
> http://plone.org/documentation/how-to/catalog-anything/
>
> Mi sa che bisogna passare una lista al KeywordIndex.
>


Ciao Yuri e grazie.

gia'. purtroppo senza questo problema (indicizzazione di campi a valore 
singolo), potevo passare direttamente i risultati di una query mysql:

mio_catalog = context.portal_catalog
for mio_obj in context.query_mysql:
  mio_uid=container.virtual_url_path() + '/miadestinazione'
  mio_catalog.catalog_object(mio_obj,mio_uid)

ora va ripensato..

butto la' un paio di domande, spero non troppo campate in aria..:

e' possibile aggiornare un singolo indice e relativi metadati, mantenendo 
inalterati gli altri? visto che "If provided, idxs specifies the names of 
indexes to update.", ho provato con

mio_catalog = context.portal_catalog
for mio_obj in context.query_mysql1:
  idx_value = mio_obj['idx_value']
  mio_uid=container.virtual_url_path() + '/miadestinazione'
  mio_catalog.catalog_object(mio_obj,mio_uid)

  x = context.sql_queries.query_mysql2(idx_value=idx_value)
  mia_lista = []
  for y in x:
    elemento_lista = y[0]
    mia_lista.append(elemento_lista)
    mio_catalog.catalog_object(mia_lista,mio_uid,idxs=['MioKwIndex'])

ometto la struttura delle queries.

fatto sta che oltre ad essere ridondante manco funziona...mi scrive qualcosa 
che non ricordo sull' uso di idxs..se rilevante riproduco il codice e posto 
l' errore.

inoltre:

mio_obj mi risulta dover essere..un oggetto (non un dictionary o altro) 
altrimenti catalog_object non lo considera. Avevo pensato di concatenare il 
recordset della query_mysql1 e della query_mysql2 in un dictionary ma mi sono 
fermato, non ho alcuna esperienza con serializzazioni, pickling etc. secondo 
te/voi e' una strada percorribile?

forse mi sto perdendo in un bicchiere d' acqua quindi se qualcuno puo' mi 
mostri la via :-)

salve a tutti.




Maggiori informazioni sulla lista Plone-IT