# How to implement this in elastic

**URL:** <https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255>\
**Category:** Elasticsearch\
**Created:** [February 2, 2018, 4:44pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255 "2018-02-02T16:44:28Z")\
**Posts on this page:** 16\
**Page:** 2

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [February 2, 2018, 9:42pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255/21 "2018-02-02T21:42:12Z")

</div>

Add the range part like you did for terms inside the must part.

I forgot to say that you should replace `must` by `filter` BTW.

---

<div class="post-metadata">

**Author:** ![aliyesami](https://avatars.discourse-cdn.com/v4/letter/a/ecb155/32.png) [@aliyesami](https://discuss.elastic.co/u/aliyesami)\
**Post date:** [February 5, 2018, 3:28pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255/22 "2018-02-05T15:28:06Z")

</div>

i can't get the syntax right , can you please help

```
GET purchase/_search
{
  "query": {
    "bool": {
      "must_not": [
        {"match": {"accttype_acct_type_code.keyword": "07"}},
        {"match": {"emp_emp_code.keyword": "9985"}}
      ],
      "filter": [
        {"terms": {"purstat_pur_status_code.keyword": ["08","09","10"]}},
        {"terms": {"plaza_plaza_id.keyword":["009500","009502"]}},
        {"terms": {"product_pur_product_code.keyword":["01","02","03","04", "05","10","11","12","13","15","16","17","18"]}},
        {"range":{
       "pur_trans_date":{
          "gte":"2015-01-01T05:00:02.000Z",
          "lte":"2015-01-01T10:00:02.000Z",
          "format":"yyyyMMdd'T'HHmmss.SSSZ"
       }}
      ]
    }
  }
}
```

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [February 5, 2018, 4:09pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255/23 "2018-02-05T16:09:28Z")

</div>

What is wrong ?

An error?

---

<div class="post-metadata">

**Author:** ![aliyesami](https://avatars.discourse-cdn.com/v4/letter/a/ecb155/32.png) [@aliyesami](https://discuss.elastic.co/u/aliyesami)\
**Post date:** [February 5, 2018, 4:10pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255/24 "2018-02-05T16:10:32Z")

</div>

no it does not even give me a green arrow button to run , so syntax issues.

---

<div class="post-metadata">

**Author:** ![aliyesami](https://avatars.discourse-cdn.com/v4/letter/a/ecb155/32.png) [@aliyesami](https://discuss.elastic.co/u/aliyesami)\
**Post date:** [February 5, 2018, 4:29pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255/25 "2018-02-05T16:29:27Z")

</div>

this works but then I can't add the must terms to it .

```
GET purchase/_search
{
  "query": {
    "bool": {
      "must_not": [
        {"match": {"accttype_acct_type_code.keyword": "07"}},
        {"match": {"emp_emp_code.keyword": "9985"}}
      ],
      "filter": {
        "range":{
          "pur_trans_date":{
          "gte":"2015-01-01 05:00:02",
          "lte":"2015-01-01 10:00:02",
          "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
         }
       }
      }
    }
  }
}
```

---

<div class="post-metadata">

**Author:** ![aliyesami](https://avatars.discourse-cdn.com/v4/letter/a/ecb155/32.png) [@aliyesami](https://discuss.elastic.co/u/aliyesami)\
**Post date:** [February 5, 2018, 4:30pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255/26 "2018-02-05T16:30:59Z")

</div>

how can I add these conditions to the above ?

{"terms": {"purstat\_pur\_status\_code.keyword": ["08","09","10"]}},  
{"terms": {"plaza\_plaza\_id.keyword":["009500","009502"]}},  
{"terms": {"product\_pur\_product\_code.keyword":["01","02","03","04", "05","10","11","12","13","15","16","17","18"]}}

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [February 5, 2018, 4:39pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255/27 "2018-02-05T16:39:25Z")

</div>

Why? Does it fail?

---

<div class="post-metadata">

**Author:** ![aliyesami](https://avatars.discourse-cdn.com/v4/letter/a/ecb155/32.png) [@aliyesami](https://discuss.elastic.co/u/aliyesami)\
**Post date:** [February 5, 2018, 4:45pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255/28 "2018-02-05T16:45:54Z")

</div>

ok this query is working but logically is it correct?  
also its not complaining about time format .. how can I correct it?

```
GET purchase/_search
{
"query": {
    "bool": {
        "must": {
            "range": {
             "pur_trans_date":{
             "gte":"2016-01-01 00:00:00",
             "lte":"2016-01-01 23:59:59",
             "format": "yyyy-MM-dd HH24:mm:ss||yyyy-MM-dd||epoch_millis"
              }
            }
        },
        "must_not": [
          {"match": {"accttype_acct_type_code.keyword": "07"}},
          {"match": {"emp_emp_code.keyword": "9985"}}
        ],
        "filter": [
          {"terms": {"purstat_pur_status_code.keyword": ["08","09","10"]}},
          {"terms": {"plaza_plaza_id.keyword":["009500","009502"]}},
          {"terms": {"product_pur_product_code.keyword":["01","02","03","04", "05","10","11","12","13","15","16","17","18"]}}
        ]
        }
    }
}

```

}

---

<div class="post-metadata">

**Author:** ![aliyesami](https://avatars.discourse-cdn.com/v4/letter/a/ecb155/32.png) [@aliyesami](https://discuss.elastic.co/u/aliyesami)\
**Post date:** [February 5, 2018, 5:31pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255/29 "2018-02-05T17:31:07Z")

</div>

error I am getting is

> ```
> "reason": "failed to parse date field [2016-01-01 00:00:00] with format [yyyy-MM-dd HH24:mm:ss||yyyy-MM-dd||epoch_millis]"
> 
> ```

---

<div class="post-metadata">

**Author:** ![aliyesami](https://avatars.discourse-cdn.com/v4/letter/a/ecb155/32.png) [@aliyesami](https://discuss.elastic.co/u/aliyesami)\
**Post date:** [February 5, 2018, 5:49pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255/30 "2018-02-05T17:49:10Z")

</div>

ok this worked , is it the right logic though of what I was trying to achieve?

```
GET purchase/_search
{
"query": {
    "bool": {
        "must": {
            "range": {
             "pur_trans_date":{
        	 "gte":"2016/01/01T00:00:00.000Z",
         	 "lte":"2016/01/01T23:59:59.000Z",
          	 "format":"yyyy/MM/dd'T'HH:mm:ss.SSSZ"
              }
            }
        },
        "must_not": [
          {"match": {"accttype_acct_type_code.keyword": "07"}},
          {"match": {"emp_emp_code.keyword": "9985"}}
        ],
        "filter": [
          {"terms": {"purstat_pur_status_code.keyword": ["08","09","10"]}},
          {"terms": {"plaza_plaza_id.keyword":["009500","009502"]}},
          {"terms": {"product_pur_product_code.keyword":["01","02","03","04", "05","10","11","12","13","15","16","17","18"]}}
        ]
        }
    }
}
}
```

---

<div class="post-metadata">

**Author:** ![aliyesami](https://avatars.discourse-cdn.com/v4/letter/a/ecb155/32.png) [@aliyesami](https://discuss.elastic.co/u/aliyesami)\
**Post date:** [February 5, 2018, 7:07pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255/31 "2018-02-05T19:07:12Z")

</div>

ok I verified the data from the source database and it matches so query is good.  
thanks a lot for your help.

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [February 5, 2018, 7:39pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255/32 "2018-02-05T19:39:00Z")

</div>

But you should better move the range part to the filter clause

---

<div class="post-metadata">

**Author:** ![aliyesami](https://avatars.discourse-cdn.com/v4/letter/a/ecb155/32.png) [@aliyesami](https://discuss.elastic.co/u/aliyesami)\
**Post date:** [February 5, 2018, 8:38pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255/33 "2018-02-05T20:38:03Z")

</div>

I will but for my learning can you explain why please?

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [February 5, 2018, 10:06pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255/34 "2018-02-05T22:06:49Z")

</div>

Must clauses might be used in computing a score.  
Filter clauses are not used to compute the score so they can be cached and run faster.

Although elasticsearch does OOTB some optimizations, I'd recommend not using must if your goal is just to filter results.

---

<div class="post-metadata">

**Author:** ![aliyesami](https://avatars.discourse-cdn.com/v4/letter/a/ecb155/32.png) [@aliyesami](https://discuss.elastic.co/u/aliyesami)\
**Post date:** [February 6, 2018, 8:38pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255/35 "2018-02-06T20:38:02Z")

</div>

thanks . valuable info.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [March 6, 2018, 8:38pm UTC](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255/36 "2018-03-06T20:38:03Z")

</div>

Closed on March 6, 2018, 8:38pm UTC

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.

[Previous page](https://discuss.elastic.co/t/how-to-implement-this-in-elastic/118255.md?page=1)
