No mapping found for field in order to sort on in ElasticSearch
Solution 1
After digging more, I found the solution as given below. ignore_unmapped
should be explicitly set to true
in the sort clause.
"sort" : [
{ "rating": {"order" : "desc" , "ignore_unmapped" : true} },
{ "price": {"order" : "asc" , "missing" : "_last" , "ignore_unmapped" : true} }
]
For further information have a look at the Elasticsearch references for:
Solution 2
For those looking for an example of both
ignore_unmapped
andunmapped_type
please see my response here.
Note that "ignore_unmapped" is now deprecated in favor of "unmapped_type". This was done as part of #7039
From documentation: Before 1.4.0 there was the ignore_unmapped boolean parameter, which was not enough information to decide on the sort values to emit, and didn’t work for cross-index search. It is still supported but users are encouraged to migrate to the new unmapped_type instead.
By default, the search request will fail if there is no mapping associated with a field. The unmapped_type option allows to ignore fields that have no mapping and not sort by them. The value of this parameter is used to determine what sort values to emit. Here is an example of how it can be used:
{
"sort" : [
{ "price" : {"unmapped_type" : "long"} },
],
"query" : {
"term" : { "user" : "kimchy" }
}
}
If any of the indices that are queried doesn’t have a mapping for price then Elasticsearch will handle it as if there was a mapping of type long, with all documents in this index having no value for this field.
Solution 3
Apparently ElasticSearch won't sort on null values. I was assuming it would treat null as being at the start or end (as with SQL ordering) but I believe it also triggers this error.
So if you see this error, you may need to ensure the sort attribute has a default value when it's sent to ElasticSearch.
I had this error with Rails+ElasticSearch+Tire because the sort column didn't have a default value, so was being sent to ES as null.
This issue indicates null values are handling, but it wasn't my experience. It's something worth trying anyway.
Solution 4
if you are using es 6.7
try this one
sort : ["title.keyword:desc"]
Solution 5
I experienced the same problem (sorta; would get some errors, but some results), but in my case my search was being issued at the root (no index specified), and the errors I was getting were because the search/order was also looking to a Kibana index.
Stupid error, but maybe this'll help someone else who ends up here.
Yadu
Updated on November 05, 2020Comments
-
Yadu over 3 years
Elasticsearch throws a
SearchParseException
while parsing query if there are some documents found not containing field used in sort criteria.SearchParseException: Parse Failure [No mapping found for [price] in order to sort on]
How can I successfully search these documents, even if some are missing the
price
field? -
c4k over 10 yearsHi, I have the same problem and I don't understand how this works... The attributes missing and ignore_unmapped should work together right ? If for example I set missing to "_last" and ignore_unmapped to "false", I still have the problem but I want the documents to be in the results in all cases even if they don't have the attribute.
-
mgoetzke about 10 yearsi have the same issue .. but when i specify ignore unmapped i dont get any sorting at all when searching the root... this limits the ability to search for me if i have to define the index ... i would simply want all matching results to be sorted by a field if it exists, and fill use a default for those that dont.. EDIT:
-
reinaldoluckman almost 9 yearsI have this problem and "ignore_unmapped" don't work if your _type is empty (i.e. without any document indexed).
-
lukmdo almost 9 yearsLooks like the new strategy is to use unmapped_type
-
BentCoder almost 8 yearsMy queries always worked until today without updating any libraries etc. but today I started getting this same error. I now added
"ignore_unmapped" : true
and it started to work again but strange thing is, what has happened behind the scene! Who knows! Anyway, it works now. +1 -
Sher10ck almost 6 yearsCan someone clarify the difference between "missing" and "unmapped"? For a certain field, if some documents have it while others don't, is such field treated as "missing" or "unmapped"? Does "missing" mean the field is in the document but the corresponding value is null?
-
Rennish Joseph over 5 yearsFor making the NEST 6.x change, please follow this link elastic.co/guide/en/elasticsearch/client/net-api/current/…
-
mirik over 4 yearsIt helped me - elastic 7.3