Filter empty array feilds


(chirag04) #1

My document structure is something like:

{
title: string,
description: string,
privacy_mode: string,
hidden: boolean,
added_by: string,
topics: array
}

I am trying to query elasticsearch. However I dont want any document with empty topics array field.

Below is a function which builds the query object:

function getQueryObject(data) {
var orList = [{ "term": {"privacy_mode": "public", "hidden": false} }]
if (data.user) {
orList.push({ "term": {"added_by": data.user} });
}

var queryObj = {
    "fields": ["title", "topics", "added_by", "img_url", "url", "type"],
    "query": {
        "filtered" : {
            "query" : {
                "multi_match" : {
                    "query" : data.query + '*',
                    "fields" : ["title^4", "topics", "description^3", "tags^2", "body^2", "keywords",
                                "entities", "_id"]
                }
            },
            "filter" : {
                "or": orList
            },
            "filter" : {
                "limit" : {"value" : 15}
            },
            "filter": {
               "script": {
                        "script": "doc['topics'].values.length > 0"
               }
           }
        }
    }
}
return queryObj;

};

This still gives me elements with empty topics array. wondering whats wrong!

Thank for the help


(system) #2