From f0f2294695053bffb66ed4ca59747627f8fca4be Mon Sep 17 00:00:00 2001 From: Mayya Sharipova Date: Thu, 8 Aug 2019 09:38:05 -0400 Subject: [PATCH] Add filters in examples of vector functions (#45327) --- .../vectors/vector-functions.asciidoc | 98 ++++++++++++++----- 1 file changed, 76 insertions(+), 22 deletions(-) diff --git a/docs/reference/vectors/vector-functions.asciidoc b/docs/reference/vectors/vector-functions.asciidoc index d08af2d03bf..31b6b211e6a 100644 --- a/docs/reference/vectors/vector-functions.asciidoc +++ b/docs/reference/vectors/vector-functions.asciidoc @@ -29,6 +29,9 @@ PUT my_index }, "my_sparse_vector" : { "type" : "sparse_vector" + }, + "status" : { + "type" : "keyword" } } } @@ -37,13 +40,15 @@ PUT my_index PUT my_index/_doc/1 { "my_dense_vector": [0.5, 10, 6], - "my_sparse_vector": {"2": 1.5, "15" : 2, "50": -1.1, "4545": 1.1} + "my_sparse_vector": {"2": 1.5, "15" : 2, "50": -1.1, "4545": 1.1}, + "status" : "published" } PUT my_index/_doc/2 { "my_dense_vector": [-0.5, 10, 10], - "my_sparse_vector": {"2": 2.5, "10" : 1.3, "55": -2.3, "113": 1.6} + "my_sparse_vector": {"2": 2.5, "10" : 1.3, "55": -2.3, "113": 1.6}, + "status" : "published" } -------------------------------------------------- @@ -59,13 +64,19 @@ GET my_index/_search { "query": { "script_score": { - "query": { - "match_all": {} + "query" : { + "bool" : { + "filter" : { + "term" : { + "status" : "published" <1> + } + } + } }, "script": { - "source": "cosineSimilarity(params.query_vector, doc['my_dense_vector']) + 1.0", <1> + "source": "cosineSimilarity(params.query_vector, doc['my_dense_vector']) + 1.0", <2> "params": { - "query_vector": [4, 3.4, -0.2] <2> + "query_vector": [4, 3.4, -0.2] <3> } } } @@ -73,8 +84,9 @@ GET my_index/_search } -------------------------------------------------- // CONSOLE -<1> The script adds 1.0 to the cosine similarity to prevent the score from being negative. -<2> To take advantage of the script optimizations, provide a query vector as a script parameter. +<1> To restrict the number of documents on which script score calculation is applied, provide a filter. +<2> The script adds 1.0 to the cosine similarity to prevent the score from being negative. +<3> To take advantage of the script optimizations, provide a query vector as a script parameter. NOTE: If a document's dense vector field has a number of dimensions different from the query's vector, an error will be thrown. @@ -88,8 +100,14 @@ GET my_index/_search { "query": { "script_score": { - "query": { - "match_all": {} + "query" : { + "bool" : { + "filter" : { + "term" : { + "status" : "published" + } + } + } }, "script": { "source": "cosineSimilaritySparse(params.query_vector, doc['my_sparse_vector']) + 1.0", @@ -112,8 +130,14 @@ GET my_index/_search { "query": { "script_score": { - "query": { - "match_all": {} + "query" : { + "bool" : { + "filter" : { + "term" : { + "status" : "published" + } + } + } }, "script": { "source": """ @@ -141,8 +165,14 @@ GET my_index/_search { "query": { "script_score": { - "query": { - "match_all": {} + "query" : { + "bool" : { + "filter" : { + "term" : { + "status" : "published" + } + } + } }, "script": { "source": """ @@ -169,8 +199,14 @@ GET my_index/_search { "query": { "script_score": { - "query": { - "match_all": {} + "query" : { + "bool" : { + "filter" : { + "term" : { + "status" : "published" + } + } + } }, "script": { "source": "1 / (1 + l1norm(params.queryVector, doc['my_dense_vector']))", <1> @@ -202,8 +238,14 @@ GET my_index/_search { "query": { "script_score": { - "query": { - "match_all": {} + "query" : { + "bool" : { + "filter" : { + "term" : { + "status" : "published" + } + } + } }, "script": { "source": "1 / (1 + l1normSparse(params.queryVector, doc['my_sparse_vector']))", @@ -227,8 +269,14 @@ GET my_index/_search { "query": { "script_score": { - "query": { - "match_all": {} + "query" : { + "bool" : { + "filter" : { + "term" : { + "status" : "published" + } + } + } }, "script": { "source": "1 / (1 + l2norm(params.queryVector, doc['my_dense_vector']))", @@ -251,8 +299,14 @@ GET my_index/_search { "query": { "script_score": { - "query": { - "match_all": {} + "query" : { + "bool" : { + "filter" : { + "term" : { + "status" : "published" + } + } + } }, "script": { "source": "1 / (1 + l2normSparse(params.queryVector, doc['my_sparse_vector']))",