[FeatureServer] query using tsvector
Iocast
iocast at me.com
Wed Dec 19 21:03:15 PST 2012
Hi Gery
I need to setup an example to reproduce your questions. Would take a while 'cause I'm not available the next days.
I will write you if I have any news on that.
Release 2.0 should come out somewhere in February (hopefully). The main changes are that you are able to implement your own services as a plugin and the current term "service" is then called "outputFormat".
Cheers
Michel
On Dec 19, 2012, at 10:16 PM, Gery . <gamejihou at hotmail.com> wrote:
> Hi Michel,
>
> Many thanks for your answer, that session.query works well in GA, for that I had to define a class TsVector for the tsvector type first, and after assigning it to my tsvector column (ts in my table), I run that line as part of my model.py (python my_model.py). I just tried your suggestion, but with no much luck:
>
> http://www.web.web/fs/Boreholes?format=GeoJSON&ts__ilike=ODP&queryable=ts
>
> using:
>
> *** GeoAlchemy.py.bk 2012-12-15 23:15:46.000000000 +0100
> --- GeoAlchemy.py 2012-12-19 20:41:32.000000000 +0100
> ***************
> *** 57,65 ****
>
> def feature_predicate(self, key, operator_name, value):
> if operator_name == 'like':
> ! return key.like('%'+value+'%')
> elif operator_name == 'ilike':
> ! return key.ilike('%'+value+'%')
> else:
> return self.query_operators[operator_name](key,value)
>
> --- 57,65 ----
>
> def feature_predicate(self, key, operator_name, value):
> if operator_name == 'like':
> ! return key.ts.op('@@')(func.to_tsquery("value"))
> elif operator_name == 'ilike':
> ! return key.ts.op('@@')(func.to_tsquery("value"))
> else:
> return self.query_operators[operator_name](key,value)
>
> the error is similar to the one in my last email:
> An error occurred: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with Boreholes.ts has an attribute 'ts'
> File "/var/www/html/mop/fs/web_request/handlers.py", line 230, in cgi
> accepts = accepts )
> File "/var/www/html/mop/fs/FeatureServer/Server.py", line 245, in dispatchRequest
> result = method(action)
> File "/var/www/html/mop/fs/FeatureServer/DataSource/GeoAlchemy.py", line 159, in select
> for k, v in action.attributes.iteritems()]
> File "/var/www/html/mop/fs/FeatureServer/DataSource/GeoAlchemy.py", line 62, in feature_predicate
> return key.ts.op('@@')(func.to_tsquery("value"))
> File "/usr/lib/python2.6/site-packages/sqlalchemy/orm/attributes.py", line 211, in __getattr__
> key)
>
>
> {'queryable': 'ts', 'ts__ilike': 'ODP', 'format': 'GeoJSON'}
>
> I think something else is necessary but no idea what it is. Thanks for putting this in your todo list, one question, do you havea date for FS 2.0?
>
> Cheers,
>
> Gery
>
> __________________________________________________________________________________________
> Piensa en el medio ambiente - mantenlo en la pantalla. NO lo imprimas si NO es necesario.
> Think green - keep it on the screen. Do NOT print if it is NOT necessary.
> Denken Sie an die Umwelt - bewahren Sie es auf dem Bildschirm. Drucken Sie NICHT, wenn es NICHT notwendig ist.
>
>
> Subject: Re: [FeatureServer] query using tsvector
> From: michel.ott at me.com
> Date: Wed, 19 Dec 2012 14:12:30 +0100
> CC: featureserver at lists.osgeo.org
> To: gamejihou at hotmail.com
>
> Hi Gery
>
> Your wrote that in GA it should look like this:
> session.query(Boreholes).filter(Boreholes.tsvector.op('@@')(func.to_tsquery("ODP"))).all()"
>
> what if you change your plainto_tsquery to the same appearance as in your filter() example above? Something like the following line:
> key.tsvector.op('@@')(func.to_tsquery("value"))
>
> Cheers
> Michel
>
> P.S.: I should put this on my todo list for release 2.0
>
>
>
>
> On Dec 19, 2012, at 12:22 PM, Gery . <gamejihou at hotmail.com> wrote:
>
> I've been changing the GeoAlchemy.py a bit in this way,in order to keep using the operator 'ilike' but as plainto_tsquery:
>
> *** GeoAlchemy.py.bk 2012-12-15 23:15:46.000000000 +0100
> --- GeoAlchemy.py 2012-12-19 12:00:13.000000000 +0100
> ***************
> *** 57,65 ****
>
> def feature_predicate(self, key, operator_name, value):
> if operator_name == 'like':
> ! return key.like('%'+value+'%')
> elif operator_name == 'ilike':
> ! return key.ilike('%'+value+'%')
> else:
> return self.query_operators[operator_name](key,value)
>
> --- 57,65 ----
>
> def feature_predicate(self, key, operator_name, value):
> if operator_name == 'like':
> ! return key.plainto_tsquery(''+value+'')
> elif operator_name == 'ilike':
> ! return key.plainto_tsquery(''+value+'')
> else:
> return self.query_operators[operator_name](key,value)
>
> and using the same call but with the tsvector column (ie. http://www.myweb.web/fs/Boreholes?format=GeoJSON&ts__ilike=ODP&queryable=ts), I get this:
> An error occurred: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with Boreholes.ts has an attribute 'plainto_tsquery'
> File "/var/www/html/mop/fs/web_request/handlers.py", line 230, in cgi
> accepts = accepts )
> File "/var/www/html/mop/fs/FeatureServer/Server.py", line 245, in dispatchRequest
> result = method(action)
> File "/var/www/html/mop/fs/FeatureServer/DataSource/GeoAlchemy.py", line 159, in select
> for k, v in action.attributes.iteritems()]
> File "/var/www/html/mop/fs/FeatureServer/DataSource/GeoAlchemy.py", line 62, in feature_predicate
> return key.plainto_tsquery(''+value+'')
> File "/usr/lib/python2.6/site-packages/sqlalchemy/orm/attributes.py", line 211, in __getattr__
> key)
>
>
> {'queryable': 'ts', 'ts__ilike': 'ODP', 'format': 'GeoJSON'}
> if I add "@@ plainto_tsquery" instead, it gives a syntax error in the fs_error.log. My idea is to replace only the return of the'ilike' or 'like' operators (and not the name itself) and use instead the '@@ plainto_tsquery', so I can keep using the same call, ie:
>
> http://www.myweb.web/fs/Boreholes?format=GeoJSON&ts__ilike=ODP&queryable=ts
>
> so,
>
> it calls in SQL (actually this doesn't work in postgresql/postgis for tsvector type "ERROR: operator does not exist: tsvector ~~* unknown):
> select * from boreholes_table where ts ilike '%ODP%';
>
> and with the change above (doesn't work so far), should call (this works in postgresql/postgis):
> select * from boreholes_table where ts @@ plainto_tsquery('ODP');
>
> Thanks in advance for any hint on this,
>
> Gery
> __________________________________________________________________________________________
> Piensa en el medio ambiente - mantenlo en la pantalla. NO lo imprimas si NO es necesario.
> Think green - keep it on the screen. Do NOT print if it is NOT necessary.
> Denken Sie an die Umwelt - bewahren Sie es auf dem Bildschirm. Drucken Sie NICHT, wenn es NICHT notwendig ist.
>
>
> From: gamejihou at hotmail.com
> To: featureserver at lists.osgeo.org; iocast at me.com
> Subject: query using tsvector
> Date: Tue, 18 Dec 2012 16:02:17 +0000
>
> Hello,
>
> I've been testing FS with GA and found something that don't get how to put it.
>
> For instance, this call works very well in FS:
>
> First example:
> [code]
> in FS: http://www.myweb.web/fs/Boreholes?format=GeoJSON&source__ilike=ODP&queryable=source
> in SQL: SELECT * FROM boreholes_table where source ilike '%ODP%'
> [/code]
>
> and what I'm looking for is querying this table but using the tsvector column, so this works in SQL but don't know how to put it in FS:
>
> Second example:
> [code]
> in FS: ??
> in SQL: select * from boreholes_table where tsvector @@ plainto_tsquery('ODP');
> (in any case this is for GA: "session.query(Boreholes).filter(Boreholes.tsvector.op('@@')(func.to_tsquery("ODP"))).all()")
> [/code]
>
> based on the first SQL (and FS) example, how could I put it for the second SQL example?
>
> Any hint is appreciated, thanks in advance,
>
> Best regards,
>
>
> __________________________________________________________________________________________
> Piensa en el medio ambiente - mantenlo en la pantalla. NO lo imprimas si NO es necesario.
> Think green - keep it on the screen. Do NOT print if it is NOT necessary.
> Denken Sie an die Umwelt - bewahren Sie es auf dem Bildschirm. Drucken Sie NICHT, wenn es NICHT notwendig ist.
> _______________________________________________
> FeatureServer mailing list
> FeatureServer at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/featureserver
>
> _______________________________________________
> FeatureServer mailing list
> FeatureServer at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/featureserver
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/featureserver/attachments/20121220/70694a06/attachment-0001.html>
More information about the FeatureServer
mailing list