ElasticSearch: How to search for a value in any field, across all types, in one or more indices?

Information Technology picture Information Technology · Dec 8, 2015 · Viewed 16.9k times · Source

I have two indices my_index_1 and my_index_2. Within these indices, I have the following document types:

my_index_1:

  • people
  • organizations
  • roles
  • skills

my_index_2:

  • products
  • services
  • patents
  • trademarks
  • servicemarks

Each of the types has different fields.

My Question: What is the best way to query for the string "abc" in any field of any type, across any one or even both indices?

I don't see anything in the documentation that facilitates such a search. Is there something that might look like:

$ curl -XPOST 'localhost:9200/_search?pretty' -d '
{
  "query": { "match": { *: "abc" } }
}'

Thanks, in advance, for any help you can offer.

Answer

Val picture Val · Dec 8, 2015

Either the query_string query or the match query would be what you're looking for.

query_string will use the special _all field if none is specified in default_field, so that would work out well.

curl -XPOST 'localhost:9200/_search?pretty' -d '{
  "query": { "query_string": { "query": "abc" } }
}'

And with match you can just specify the _all as well.

curl -XPOST 'localhost:9200/_search?pretty' -d '{
  "query": { "match": { "_all": "abc" } }
}'

Note that with query_string you may use wildcards, which you can't with match


UPDATE:

As the _all field was deprecated in 6.0, the solution is now to implement a custom all field