Using a search pipeline
You can use a search pipeline in the following ways:
- Specify an existing pipeline for a request.
- Use a temporary pipeline for a request.
- Set a default pipeline for all requests in an index.
Specifying an existing search pipeline for a request
After you create a search pipeline, you can use the pipeline with a query in the following ways. For a complete example of using a search pipeline with a filter_query
processor, see filter_query
processor example.
Specifying the pipeline in a query parameter
You can specify the pipeline name in the search_pipeline
query parameter as follows:
GET /my_index/_search?search_pipeline=my_pipeline
Specifying the pipeline in the request body
You can provide a search pipeline ID in the search request body as follows:
GET /my-index/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 10,
"search_pipeline": "my_pipeline"
}
For multi-search, you can provide a search pipeline ID in the search request body as follows:
GET /_msearch
{ "index": "test"}
{ "query": { "match_all": {} }, "from": 0, "size": 10, "search_pipeline": "my_pipeline"}
{ "index": "test-1", "search_type": "dfs_query_then_fetch"}
{ "query": { "match_all": {} }, "search_pipeline": "my_pipeline1" }
Using a temporary search pipeline for a request
As an alternative to creating a search pipeline, you can define a temporary search pipeline to be used for only the current query:
POST /my-index/_search
{
"query" : {
"match" : {
"text_field" : "some search text"
}
},
"search_pipeline" : {
"request_processors": [
{
"filter_query" : {
"tag" : "tag1",
"description" : "This processor is going to restrict to publicly visible documents",
"query" : {
"term": {
"visibility": "public"
}
}
}
}
],
"response_processors": [
{
"rename_field": {
"field": "message",
"target_field": "notification"
}
}
]
}
}
With this syntax, the pipeline does not persist and is used only for the query for which it is specified.
Default search pipeline
For convenience, you can set a default search pipeline for an index. Once your index has a default pipeline, you don’t need to specify the search_pipeline
query parameter in every search request.
Setting a default search pipeline for an index
To set a default search pipeline for an index, specify the index.search.default_pipeline
in the index’s settings:
PUT /my_index/_settings
{
"index.search.default_pipeline" : "my_pipeline"
}
After setting the default pipeline for my_index
, you can try the same search for all documents:
GET /my_index/_search
The response contains only the public document, indicating that the pipeline was applied by default:
Response
{
"took" : 19,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.0,
"hits" : [
{
"_index" : "my_index",
"_id" : "1",
"_score" : 0.0,
"_source" : {
"message" : "This is a public message",
"visibility" : "public"
}
}
]
}
}
You can search across multiple indexes that share the same default pipeline. For example, alias1
has two indexes, my_index1
and my_index2
, both of which have the default pipeline my_pipeline
attached to them:
GET /alias1/_search
The response includes only the public version of the document, confirming that the default pipeline was successfully applied:
Response
{
"took": 59,
"timed_out": false,
"_shards": {
"total": 2,
"successful": 2,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.0,
"hits": [
{
"_index": "my_index1",
"_id": "1",
"_score": 0.0,
"_source": {
"message": "This is a public message",
"visibility": "public"
}
}
]
}
}
Disabling the default pipeline for a request
If you want to run a search request without applying the default pipeline, you can set the search_pipeline
query parameter to _none
:
GET /my_index/_search?search_pipeline=_none
Removing the default pipeline
To remove the default pipeline from an index, set it to null
or _none
:
PUT /my_index/_settings
{
"index.search.default_pipeline" : null
}
PUT /my_index/_settings
{
"index.search.default_pipeline" : "_none"
}