[GIS] Case insensitive CQL-OpenLayers filter

cql-filtergeoserveropenlayers-2postgresql

I have the following filter in OpenLayers 2.13

var filter_c = new OpenLayers.Filter.Comparison({
        type: OpenLayers.Filter.Comparison.LIKE,
        property: 'p_name', 
        value: '%'+document.getElementById("nm").value+'%'
})

I also use GeoServer 2.1.3 and PostgreSQL 9.1 / PostGIS 2.0.

This filter is case sensitive and is applied to a vector layer. I can provide more code if you want.

I try to use ILIKE instead of LIKE but no luck. What am I missing? How can I make this filter case insensitive?

Here is the complete, original code

var filter_c = new OpenLayers.Filter.Comparison({
    type: OpenLayers.Filter.Comparison.LIKE,
    property: 'p_name', 
    value: '%'+document.getElementById("nm").value+'%'
});

//pass the filter to the layer
var prot =  new OpenLayers.Protocol.WFS({
    url:  "/geoserver/wfs",
    featureType: "pins",
    featureNS: "http://www.mysite.gr",
    defaultFilter: filter_cl
});

var _CallBack = function(resp) {
    pins.addFeatures(resp.features)
    var cb = pins.features.length;
    if (cb == 0){alert("Nothing Found");}
};

var response = prot.read({callback: _CallBack});


//refresh to render POIs
pins.refresh({force:true});

The pins layer takes data from a table in postgreSQL/PostGIS. This table has id, name, geometry, category, etc.Names are in UTF8 and are in Greek, such as Ακρόπολη, Παρθενώναςetc.

I simply set it like pins = new OpenLayers.Layer.Vector("LayerTitle", {renderers: ["Canvas", "SVG", "VML"]}) and the I have the aforementioned code to search it

Best Answer

Since you are using GeoServer, you can use strToLowerCase() function, while passing the search term in lower case as well.

The following code should work:

var filter_c = new OpenLayers.Filter.Comparison({
        type: OpenLayers.Filter.Comparison.LIKE,
        property: 'strToLowerCase(p_name)', 
        value: '%'+String(document.getElementById("nm").value).toLowerCase()+'%'
})
Related Question