[Plone-IT] zcatalog: da mysql a keywordindex
Stefano Guglia
stefano.guglia a eutelia.com
Gio 26 Feb 2009 12:02:10 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