3

I am trying use range query with elasticsearch

{
    "query": {
        "range": {
             "order_no": {
                 "gte": "VM-0001",
                 "lte": "VM-0005"
             }
         }
    }
}

But elastic return no result. I found system have problem with string include - or _

This is mapping of that field:

"order_no" : {
      "type" : "string",
      "index_analyzer" : "str_index_analyzer",
      "search_analyzer" : "str_search_analyzer"
}

{
  "analysis": {
    "analyzer": {
      "str_search_analyzer": {
        "tokenizer": "keyword",
        "filter": [
          "lowercase"
        ]
      },
      "str_index_analyzer": {
        "tokenizer": "keyword",
        "filter": [
          "lowercase",
          "substring"
        ]
      }
    },
    "filter": {
      "substring": {
        "type": "nGram",
        "min_gram": 1,
        "max_gram": 20
      }
    }
  }
}

2 Answers 2

5

As per the documentation, in case of string fields, Elasticsearch uses a TermRangeQuery which as far as I know doesn't analyze the term to search for. This means that your range VM-0001 - VM-0005 searches for exact these terms. Whereas you have in your index something like vm-0001 (lowercase). So, either use:

{
  "query": {
    "range": {
      "order_no": {
        "gte": "vm-0001",
        "lte": "vm-0005"
      }
    }
  }
}

or add another field in your index where you keep the order_no as keyword without any lowercasing or nGram-atization.

Sign up to request clarification or add additional context in comments.

1 Comment

:) Thanks you so much. I did it success.
4
{
  "query": {
    "range": {
      "order_no": {
        "gte": "vm-0001",
        "lte": "vm-0005"
      }
    }
  }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.