No mapping found for field in order to sort on in ElasticSearch

96,860

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 and unmapped_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.

Share:
96,860
Yadu
Author by

Yadu

Updated on November 05, 2020

Comments

  • Yadu
    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
    c4k over 10 years
    Hi, 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
    mgoetzke about 10 years
    i 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
    reinaldoluckman almost 9 years
    I have this problem and "ignore_unmapped" don't work if your _type is empty (i.e. without any document indexed).
  • lukmdo
    lukmdo almost 9 years
    Looks like the new strategy is to use unmapped_type
  • BentCoder
    BentCoder almost 8 years
    My 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
    Sher10ck almost 6 years
    Can 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
    Rennish Joseph over 5 years
    For making the NEST 6.x change, please follow this link elastic.co/guide/en/elasticsearch/client/net-api/current/…
  • mirik
    mirik over 4 years
    It helped me - elastic 7.3