Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Elasticsearch compare two fields

For example MySQL query

SELECT fields_a, fields_b FROM table WHERE fields_a > fields_b;

I am trying to implement for elasticsearch. I've tried, as follows:

$where = [ "query" => [ "filter" => [ "script" => [ "script" => "doc[\"fields_a\"].value > doc[\"fields_b\"].value" ] ] ] ];

What am I missing?

like image 487
cikewang Avatar asked Jul 31 '26 20:07

cikewang


1 Answers

this should work for me

{
    "query": {
        "bool": {
            "must": [{
                "script": {
                    "script": "doc['field_a'].value > doc['field_b'].value"
                }
            }]
        }
    }
}

To select only few fields instead of the whole source document use stored_fields "stored_fields": ["field_a","field_b"] and make sure to have those fields as store=true in mappings .

{
stored_fields": ["field_a","field_b"]
    "query": {
        "bool": {
            "must": [{
                "script": {
                    "script": "doc['field_a'].value > doc['field_b']"
                }
            }]
        }
    }
}
like image 172
user3775217 Avatar answered Aug 03 '26 22:08

user3775217