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

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


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


An alternative to the now deprecated _all field is the multi match query

GET /_search{  "query": {    "multi_match" : {      "query":    "Will Smith",      "fields": [ "important_field^5", "less_important^2", "title", "*_name" ]     }  }}

Note wildcards in the field names are supported as well as boosting a fields importance with the ^# syntax

As of version 7.3:If no fields are provided, the multi_match query defaults to the index.query.default_field index settings, which in turn defaults to *. * extracts all fields in the mapping that are eligible to term queries and filters the metadata fields. All extracted fields are then combined to build a query.

Another alternative is the Query string query

GET /_search{    "query": {        "query_string" : {            "query" : "(new york city) OR (big apple)",            "default_field" : "content"        }    }}

default_field(Optional, string) Default field you wish to search if no field is provided in the query string.

Defaults to the index.query.default_field index setting, which has a default value of *.


I think you can use _all for this purpose

Try this

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

You could also use query_string as it searches against _all by default.