I am working on elastic search multiple field sort query, I have data in the following format:
{
"person_name" : "Abraham Benjamin deVilliers",
"created_on": "Tue, 02 Apr 2018 16: 17: 54 GMT",
"name": "Abraham",
"office":{
"name":"my_office"
}
},
{
"person_name" : "John Bradshaw",
"created_on": "Thu Apr 05 2018 14:42:30 GMT",
"name": "jhon",
"office": {
"name":"Abraham deVilliers"
}
},
{
"person_name" : "John Bradshaw",
"created_on": "Tue, 03 Apr 2018 11: 39: 17 GMT",
"name": "Abraham deVilliers",
"office": {
"name":"blabla"
}
}
Where the field person_name
is of type text
and created_on
is of type string
. I have to sort the above response based on the fields person_name
and created_on
.
The query we tried is as follows:
GET /my_index/_search
{
sort: [{
"person_name": { "order": "asc" },
"created_on": { "order": "desc" }
}]
}
While sorting response with the above query I am getting the following error:
message: '[illegal_argument_exception] Fielddata is disabled on text fields by default. Set fielddata=true on [person_name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.'
On searching, we found we need to modify the mapping of the field person_name
from type text
to of type keyword
. But we can't modify existing mapping as it already contains millions of records.
Is there any other way to perform a sort query on the text
field without altering the existing mapping of elastic search?.
Any help will be appreciated.
person_name
with typetext
as follows:person_name”: { “type”: “text” }
– kgangadharperson_name
we have mapping as mentioned in the above comment, we already have millions records which will be affected if we change mapping now, is there any other ways to sort without modifying mapping? – kgangadhar