问题
What I need is very simple, but I am unable to find how to do it in Elasticsearch, possibly because of the complexity of what is required to be done.
Input (two sample JSON documents)
{ "car" : 150, "bike" : 300 }
{ "car" : 100, "bike" : 200}
What I want in return is that when I fire a search query it returns me the documents with an extra field inventory
which is defined as the sum of number of cars and bikes. And in the sorted order.
Sample Output:
hits: [
{ "car" : 150, "bike" : 300, "inventory": 450},
{ "car" : 100, "bike" : 200, "inventory": 300}
]
Is it possible to do something like this in elasticsearch? (I assume using dynamic scripting)
回答1:
I did this using script fields. Refer:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-script-fields.html
sample query:
query: {
...
},
script_fields: {
inventory: {
script: "doc['car'].value + doc['bike'].value"
}
}
This would result in a separate fields column with each hit as:
fields: {
inventory: [450]
}
But, since I also wanted this to be sorted, I ended up using the sort:
query: {
...
},
sort: {
_script: {
script: "doc['car'].value + doc['bike'].value",
type: "number",
order: "desc"
}
}
which returned me a sort field with each hit, such as:
sort: [450]
来源:https://stackoverflow.com/questions/26221274/elasticsearch-dynamic-query-add-another-field-to-each-document-returned