123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- [[search-your-data]]
- = Search your data
- [[search-query]]
- A _search query_, or _query_, is a request for information about data in
- {es} data streams or indices.
- You can think of a query as a question, written in a way {es} understands.
- Depending on your data, you can use a query to get answers to questions like:
- * What processes on my server take longer than 500 milliseconds to respond?
- * What users on my network ran `regsvr32.exe` within the last week?
- * What pages on my website contain a specific word or phrase?
- A _search_ consists of one or more queries that are combined and sent to {es}.
- Documents that match a search's queries are returned in the _hits_, or
- _search results_, of the response.
- A search may also contain additional information used to better process its
- queries. For example, a search may be limited to a specific index or only return
- a specific number of results.
- [discrete]
- [[run-an-es-search]]
- == Run a search
- You can use the <<search-search,search API>> to search and
- <<search-aggregations,aggregate>> data stored in {es} data streams or indices.
- The API's `query` request body parameter accepts queries written in
- <<query-dsl,Query DSL>>.
- The following request searches `my-index-000001` using a
- <<query-dsl-match-query,`match`>> query. This query matches documents with a
- `user.id` value of `kimchy`.
- [source,console]
- ----
- GET /my-index-000001/_search
- {
- "query": {
- "match": {
- "user.id": "kimchy"
- }
- }
- }
- ----
- // TEST[setup:my_index]
- The API response returns the top 10 documents matching the query in the
- `hits.hits` property.
- [source,console-result]
- ----
- {
- "took": 5,
- "timed_out": false,
- "_shards": {
- "total": 1,
- "successful": 1,
- "skipped": 0,
- "failed": 0
- },
- "hits": {
- "total": {
- "value": 1,
- "relation": "eq"
- },
- "max_score": 1.3862942,
- "hits": [
- {
- "_index": "my-index-000001",
- "_id": "kxWFcnMByiguvud1Z8vC",
- "_score": 1.3862942,
- "_source": {
- "@timestamp": "2099-11-15T14:12:12",
- "http": {
- "request": {
- "method": "get"
- },
- "response": {
- "bytes": 1070000,
- "status_code": 200
- },
- "version": "1.1"
- },
- "message": "GET /search HTTP/1.1 200 1070000",
- "source": {
- "ip": "127.0.0.1"
- },
- "user": {
- "id": "kimchy"
- }
- }
- }
- ]
- }
- }
- ----
- // TESTRESPONSE[s/"took": 5/"took": "$body.took"/]
- // TESTRESPONSE[s/"_id": "kxWFcnMByiguvud1Z8vC"/"_id": "$body.hits.hits.0._id"/]
- [discrete]
- [[common-search-options]]
- === Common search options
- You can use the following options to customize your searches.
- *Query DSL* +
- <<query-dsl,Query DSL>> supports a variety of query types you can mix and match
- to get the results you want. Query types include:
- * <<query-dsl-bool-query,Boolean>> and other <<compound-queries,compound
- queries>>, which let you combine queries and match results based on multiple
- criteria
- * <<term-level-queries,Term-level queries>> for filtering and finding exact matches
- * <<full-text-queries,Full text queries>>, which are commonly used in search
- engines
- * <<geo-queries,Geo>> and <<shape-queries,spatial queries>>
- *Aggregations* +
- You can use <<search-aggregations,search aggregations>> to get statistics and
- other analytics for your search results. Aggregations help you answer questions
- like:
- * What's the average response time for my servers?
- * What are the top IP addresses hit by users on my network?
- * What is the total transaction revenue by customer?
- *Search multiple data streams and indices* +
- You can use comma-separated values and grep-like index patterns to search
- several data streams and indices in the same request. You can even boost search
- results from specific indices. See <<search-multiple-indices>>.
- *Paginate search results* +
- By default, searches return only the top 10 matching hits. To retrieve
- more or fewer documents, see <<paginate-search-results>>.
- *Retrieve selected fields* +
- The search response's `hit.hits` property includes the full document
- <<mapping-source-field,`_source`>> for each hit. To retrieve only a subset of
- the `_source` or other fields, see <<search-fields>>.
- *Sort search results* +
- By default, search hits are sorted by `_score`, a <<relevance-scores,relevance
- score>> that measures how well each document matches the query. To customize the
- calculation of these scores, use the
- <<query-dsl-script-score-query,`script_score`>> query. To sort search hits by
- other field values, see <<sort-search-results>>.
- *Run an async search* +
- {es} searches are designed to run on large volumes of data quickly, often
- returning results in milliseconds. For this reason, searches are
- _synchronous_ by default. The search request waits for complete results before
- returning a response.
- However, complete results can take longer for searches across
- <<frozen-indices,frozen indices>> or <<modules-cross-cluster-search,multiple
- clusters>>.
- To avoid long waits, you can use run an _asynchronous_, or _async_, search
- instead. An <<async-search-intro,async search>> lets you retrieve partial
- results for a long-running search now and get complete results later.
- [discrete]
- [[search-timeout]]
- === Search timeout
- By default, search requests don't time out. The request waits for complete
- results before returning a response.
- While <<async-search-intro,async search>> is designed for long-running
- searches, you can also use the `timeout` parameter to specify a duration you'd
- like to wait for a search to complete. If no response is received before this
- period ends, the request fails and returns an error.
- [source,console]
- ----
- GET /my-index-000001/_search
- {
- "timeout": "2s",
- "query": {
- "match": {
- "user.id": "kimchy"
- }
- }
- }
- ----
- // TEST[setup:my_index]
- To set a cluster-wide default timeout for all search requests, configure
- `search.default_search_timeout` using the <<cluster-update-settings,cluster
- settings API>>. This global timeout duration is used if no `timeout` argument is
- passed in the request. If the global search timeout expires before the search
- request finishes, the request is cancelled using <<task-cancellation,task
- cancellation>>. The `search.default_search_timeout` setting defaults to `-1` (no
- timeout).
- [discrete]
- [[global-search-cancellation]]
- === Search cancellation
- You can cancel a search request using the <<task-cancellation,task management
- API>>. {es} also automatically cancels a search request when your client's HTTP
- connection closes. We recommend you set up your client to close HTTP connections
- when a search request is aborted or times out.
- include::request/track-total-hits.asciidoc[]
- include::quickly-check-for-matching-docs.asciidoc[]
- include::request/collapse.asciidoc[]
- include::filter-search-results.asciidoc[]
- include::request/highlighting.asciidoc[]
- include::{es-repo-dir}/async-search.asciidoc[]
- include::{es-repo-dir}/search/near-real-time.asciidoc[]
- include::paginate-search-results.asciidoc[]
- include::request/inner-hits.asciidoc[]
- include::search-fields.asciidoc[]
- include::{es-repo-dir}/modules/cross-cluster-search.asciidoc[]
- include::search-multiple-indices.asciidoc[]
- include::search-shard-routing.asciidoc[]
- include::request/sort.asciidoc[]
|