Magnus
Magnus

Reputation: 424

Query with `field` returns nothing

I'm new to elastic search and am having troubles with my queries.

When I do a match all I get this;

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "hits": {
    "total": 5,
    "max_score": 1,
    "hits": [{
        "_index": "stations",
        "_type": "station",
        "_id": "4432",
        "_score": 1,
        "_source": {
          "SiteName": "Abborrkroksvägen",
          "LastModifiedUtcDateTime": "2015-02-13 10:34:20.643",
          "ExistsFromDate": "2015-02-14 00:00:00.000"
        }
      },
      {
        "_index": "stations",
        "_type": "station",
        "_id": "9110",
        "_score": 1,
        "_source": {
          "SiteName": "Abrahamsberg",
          "LastModifiedUtcDateTime": "2012-03-26 23:55:32.900",
          "ExistsFromDate": "2012-06-23 00:00:00.000"
        }
      }
    ]
  }
}

My search query looks like this:

{
  "query": {
    "query_string": {
      "fields": ["SiteName"],
      "query": "a"
    }
  }
}

The problem is that when I run the query above I get empty results which is strange. I should receive both of the documents from my index, right?

What am I doing wrong? Did I index my data wrong or is my query just messed up?

Appreciate any help I can get. Thanks guys!

Upvotes: 0

Views: 1307

Answers (2)

mshutov
mshutov

Reputation: 802

Also you may have a look at article I found recently about search - https://www.timroes.de/2016/05/29/elasticsearch-kibana-queries-in-depth-tutorial/

Upvotes: 0

avr
avr

Reputation: 4883

There is nothing wrong either in your data or query. It seems you didn't understand how data get stored in elasticsearch!

Firstly, when you index data("SiteName": "Abborrkroksvägen" and "SiteName": "Abrahamsberg") they will get stored as individual analysed terms.

When you query ES using "query":"a"(means here you are looking for the term "a" ) then it will look for whether there is any match with term a but as there are no terms so you will get empty results.

When you query ES using "query":"a*"(means all terms starts with "a") then it will return you as you expected.

Hope this clarifies your question!

Upvotes: 2

Related Questions