# Query String in Lucene syntax vs Term Filter Performance

**URL:** <https://discuss.elastic.co/t/query-string-in-lucene-syntax-vs-term-filter-performance/173622>\
**Category:** Elasticsearch\
**Created:** [March 24, 2019, 2:14am UTC](https://discuss.elastic.co/t/query-string-in-lucene-syntax-vs-term-filter-performance/173622 "2019-03-24T02:14:14Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![smlbiobot](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/smlbiobot/32/29622_2.png) [@smlbiobot](https://discuss.elastic.co/u/smlbiobot)\
**Post date:** [March 24, 2019, 2:14am UTC](https://discuss.elastic.co/t/query-string-in-lucene-syntax-vs-term-filter-performance/173622/1 "2019-03-24T02:14:15Z")

</div>

Is there any performance difference if I write out the query string in Lucene syntax vs using the term filter in dicts?

In my particular use case, I find it easier to type out my logic in a list and join them with ANDs so doing it in query\_string is preferred as it is both more readable and easier to write — but if the native term filter is faster, I would’ve used it. All of them are field keyword filters (that a field exactly match a string)

---

<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:** [March 24, 2019, 6:58am UTC](https://discuss.elastic.co/t/query-string-in-lucene-syntax-vs-term-filter-performance/173622/2 "2019-03-24T06:58:01Z")

</div>

Is the score identical in both cases? `1`?

---

<div class="post-metadata">

**Author:** ![smlbiobot](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/smlbiobot/32/29622_2.png) [@smlbiobot](https://discuss.elastic.co/u/smlbiobot)\
**Post date:** [March 26, 2019, 1:37pm UTC](https://discuss.elastic.co/t/query-string-in-lucene-syntax-vs-term-filter-performance/173622/3 "2019-03-26T13:37:09Z")

</div>

I don’t actually care about the score. I am using them as filters to do aggregations.

---

<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:** [March 26, 2019, 2:07pm UTC](https://discuss.elastic.co/t/query-string-in-lucene-syntax-vs-term-filter-performance/173622/4 "2019-03-26T14:07:38Z")

</div>

I got that. I'm asking if in your tests you are getting the same score or not.

---

<div class="post-metadata">

**Author:** ![smlbiobot](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/smlbiobot/32/29622_2.png) [@smlbiobot](https://discuss.elastic.co/u/smlbiobot)\
**Post date:** [March 26, 2019, 6:35pm UTC](https://discuss.elastic.co/t/query-string-in-lucene-syntax-vs-term-filter-performance/173622/5 "2019-03-26T18:35:31Z")

</div>

Score are both 0. This is what I get from my test queries:

```auto
  "took" : 32,
  "timed_out" : false,
  "_shards" : {
    "total" : 20,
    "successful" : 20,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 64053,
    "max_score" : 0.0,
    "hits" : []
  }
}

```

---

<div class="post-metadata">

**Author:** ![smlbiobot](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/smlbiobot/32/29622_2.png) [@smlbiobot](https://discuss.elastic.co/u/smlbiobot)\
**Post date:** [March 26, 2019, 6:37pm UTC](https://discuss.elastic.co/t/query-string-in-lucene-syntax-vs-term-filter-performance/173622/6 "2019-03-26T18:37:24Z")

</div>

First time I run the query it returns after 200 msec but if I run it again it is faster (~20-30) because it s perhaps cached? I am using bool query for both.

---

<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:** [March 26, 2019, 11:02pm UTC](https://discuss.elastic.co/t/query-string-in-lucene-syntax-vs-term-filter-performance/173622/7 "2019-03-26T23:02:59Z")

</div>

Great. So no score is ran which means to me that's it's considered as filters. The good thing is that filters are cached which explains also a faster execution after some runs.

---

<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:** [April 23, 2019, 11:03pm UTC](https://discuss.elastic.co/t/query-string-in-lucene-syntax-vs-term-filter-performance/173622/8 "2019-04-23T23:03:03Z")

</div>

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