We are currently using Oracle 11g as our database with GeoServer 2.10.2. (We 
would like to upgrade, but 2.11.0 and above cannot seem to get our catalog set 
up correctly from the existing 2.10.2 app-schema-cache.)

We are using an externally developed XML schema (we cannot change it) that 
codes some data as attributes rather than element values. E.g., Feature2 has an 
associatedFeature1 element. The primary key for any feature is the combination 
of values from two columns, CODESPACE and UUID. In the schema, Feature2 codes 
its associatedFeature1 this way:

...
<!-associatedFeature1 is coded as an attribute of the otherwise empty XML 
element -->
<ns1:associatedFeature1 xlink:href="my:code:space:longhexidecimalUUIDstring"/>
<!-price is coded as an element value, as one would normally expect -->
<ns1:price>127.83</ns1:price>
...

Both of these data elements come from non-indexed columns of the table, which 
has 20,000 rows. When we query on price, the one matching Feature2 comes back 
very quickly.
           <fes:Filter>
                  <fes:PropertyIsEqualTo>
                     <fes:ValueReference> ns1:price</fes:ValueReference>
                     <fes:Literal>127.83</fes:Literal>
                  </fes:PropertyIsEqualTo>
               </fes:Filter>

When performing a WFS query on associatedFeature1, however, the SOAP request 
filter syntax is:

            <fes:Filter>
                  <fes:PropertyIsEqualTo>
                     <fes:ValueReference> 
ns1:associatedFeature1/@xlink:href</fes:ValueReference>
                     
<fes:Literal>my:code:space:longhexidecimalUUIDstring</fes:Literal>
                  </fes:PropertyIsEqualTo>
               </fes:Filter>

A direct SQL query for the HREF on that table is instantaneous. However, the 
WFS query takes nearly 2 minutes to return the four matching Feature2 values. 
It appears to be doing what older versions of GeoServer also do for geolocation 
searches - rather than using the WHERE clause of the SQL query, it downloads 
the complete contents of the table to GeoServer and does its own row-by-row 
search for a match. The element value search is clearly adding a WHERE clause 
in order to return so quickly.

I can find no mention of this issue in any web search. Does anyone know if this 
is fixed in a later version of GeoServer as the geolocation search has been 
improved to code it in the SQL WHERE clause? Or is this issue of searching on 
an attribute value vs. an element value so unusual that nobody has ever seen it 
before?



---------------------------------------------------------------
Michael Stein, Northrop Grumman Defense Systems
7555 Colshire Dr 4098S
McLean, VA 22102
703-963-6654(cell); 301-429-5468(ofc)

_______________________________________________
Geoserver-users mailing list

Please make sure you read the following two resources before posting to this 
list:
- Earning your support instead of buying it, but Ian Turton: 
http://www.ianturton.com/talks/foss4g.html#/
- The GeoServer user list posting guidelines: 
http://geoserver.org/comm/userlist-guidelines.html

If you want to request a feature or an improvement, also see this: 
https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer


Geoserver-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-users

Reply via email to