Vinícius Mariano
Vinícius Mariano

Reputation: 103

elasticsearch match two fields

How can I get this simple SQL query running on elasticsearch ?

SELECT * FROM [mytype] WHERE a = -23.4807339 AND b = -46.60068

I'm really having troubles with it's syntax, multi-match queries doesn't work in my case, which query type should I use?

Upvotes: 9

Views: 5071

Answers (2)

Andrei Stefan
Andrei Stefan

Reputation: 52368

For queries like yours bool filter is preferred over and filter. See here the whole story about this suggestion and why is considered to be more efficient.

These being said, I would choose to do it like this:

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {"term": {"a": -23.4807339}},
            {"term": {"b": -46.60068}}
          ]
        }
      }
    }
  }
}

Upvotes: 6

rchang
rchang

Reputation: 5236

You can approach this with the and filter. For your example, something like:

{
  "size": 100,
  "query" : {"filtered" : {
    "query" : {"match_all" : {}},
    "filter" : {"and" : [
      "term" : {"a": -23.4807339},
      "term" : {"b": -46.60068}
    ]}
  }}
}

Be sure to direct the query against the correct index and type. Note that I specified the size of the return set as 100 arbitrarily - you'd have to specify a value that fits your use case.

There's more on filtered queries here, and more on the and filter here.

Upvotes: 1

Related Questions