forked from docs/doc-exports
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com> Co-authored-by: zhengxiu <zhengxiu@huawei.com> Co-committed-by: zhengxiu <zhengxiu@huawei.com>
284 lines
24 KiB
HTML
284 lines
24 KiB
HTML
<a name="css_01_0467"></a><a name="css_01_0467"></a>
|
|
|
|
<h1 class="topictitle1">Using Vector Indexes for Data Search in an OpenSearch Cluster</h1>
|
|
<div id="body0000001955726494"><div class="p" id="css_01_0467__css_01_0123_p3494164217576">Vector indexes support data searches in many different ways.<ul id="css_01_0467__css_01_0123_ul1415819211585"><li id="css_01_0467__css_01_0123_li11581826586"><a href="#css_01_0467__css_01_0123_en-us_topic_0000001268154489_section344710865418">Standard Query</a></li><li id="css_01_0467__css_01_0123_li1915815215814"><a href="#css_01_0467__css_01_0123_en-us_topic_0000001268154489_section102341611718">Compound Query</a></li><li id="css_01_0467__css_01_0123_li91581921580"><a href="#css_01_0467__css_01_0123_en-us_topic_0000001268154489_section4946246546">ScriptScore Query</a></li><li id="css_01_0467__css_01_0123_li11158920581"><a href="#css_01_0467__css_01_0123_en-us_topic_0000001268154489_section107953451661">Re-Score Query</a></li><li id="css_01_0467__css_01_0123_li121593215820"><a href="#css_01_0467__css_01_0123_section102071126171611">Painless Syntax Extension</a></li></ul>
|
|
</div>
|
|
<div class="section" id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_section344710865418"><a name="css_01_0467__css_01_0123_en-us_topic_0000001268154489_section344710865418"></a><a name="css_01_0123_en-us_topic_0000001268154489_section344710865418"></a><h4 class="sectiontitle">Standard Query</h4><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p10699133014548">Standard vector query syntax is provided for vector indexes. The following command will return <em id="css_01_0467__i210421905311112">n</em> (specified by <strong id="css_01_0467__b131267766911112">size</strong>/<strong id="css_01_0467__b122813291111112">topk</strong>) data records that are the closest matches in the queried vector data.</p>
|
|
<pre class="screen" id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_screen1466920229569">POST my_index/_search
|
|
{
|
|
"size":2,
|
|
"_source": false,
|
|
"query": {
|
|
"vector": {
|
|
"my_vector": {
|
|
"vector": [1, 1],
|
|
"topk":2
|
|
}
|
|
}
|
|
}
|
|
}</pre>
|
|
|
|
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_table112016411577" frame="border" border="1" rules="all"><caption><b>Table 1 </b>Parameters for standard query</caption><thead align="left"><tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row120119417572"><th align="left" class="cellrowborder" valign="top" width="24.12%" id="mcps1.3.2.4.2.3.1.1"><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p152017415713">Parameter</p>
|
|
</th>
|
|
<th align="left" class="cellrowborder" valign="top" width="75.88000000000001%" id="mcps1.3.2.4.2.3.1.2"><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p02013445711">Description</p>
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row1420184205713"><td class="cellrowborder" valign="top" width="24.12%" headers="mcps1.3.2.4.2.3.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p102012475715">vector (the first one)</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="75.88000000000001%" headers="mcps1.3.2.4.2.3.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p6201742577">Indicates that the query type is <strong id="css_01_0467__b197948828111112">VectorQuery</strong>.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row1120194155720"><td class="cellrowborder" valign="top" width="24.12%" headers="mcps1.3.2.4.2.3.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p42011645578">my_vector</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="75.88000000000001%" headers="mcps1.3.2.4.2.3.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p920110435711">Indicates the name of the vector field you want to query.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row39015465716"><td class="cellrowborder" valign="top" width="24.12%" headers="mcps1.3.2.4.2.3.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p17901854135712">vector (the second one)</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="75.88000000000001%" headers="mcps1.3.2.4.2.3.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p290145445715">Indicates the vector value you want to query, which can be an array or a Base64 string</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row0480125417579"><td class="cellrowborder" valign="top" width="24.12%" headers="mcps1.3.2.4.2.3.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p24811654135718">topk</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="75.88000000000001%" headers="mcps1.3.2.4.2.3.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p11481554155712">Same as the value of <strong id="css_01_0467__b140644876111112">size</strong> generally.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row1271143335915"><td class="cellrowborder" valign="top" width="24.12%" headers="mcps1.3.2.4.2.3.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p971133385920">Other optional parameters</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="75.88000000000001%" headers="mcps1.3.2.4.2.3.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p27143355918">Indicates optional query parameters. You can adjust the vector index parameters to achieve higher query performance or precision. For more information, see <a href="#css_01_0467__css_01_0123_en-us_topic_0000001268154489_table172381842595">Table 2</a>.</p>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<div class="tablenoborder"><a name="css_01_0467__css_01_0123_en-us_topic_0000001268154489_table172381842595"></a><a name="css_01_0123_en-us_topic_0000001268154489_table172381842595"></a><table cellpadding="4" cellspacing="0" summary="" id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_table172381842595" frame="border" border="1" rules="all"><caption><b>Table 2 </b>Optional query parameters</caption><thead align="left"><tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row223811465915"><th align="left" class="cellrowborder" valign="top" width="15.15%" id="mcps1.3.2.5.2.4.1.1"><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p17238114195911">Parameter</p>
|
|
</th>
|
|
<th align="left" class="cellrowborder" valign="top" width="24.46%" id="mcps1.3.2.5.2.4.1.2"><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p19238194195920">Parameter</p>
|
|
</th>
|
|
<th align="left" class="cellrowborder" valign="top" width="60.39%" id="mcps1.3.2.5.2.4.1.3"><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p182381943596">Description</p>
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row623816413595"><td class="cellrowborder" rowspan="2" valign="top" width="15.15%" headers="mcps1.3.2.5.2.4.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p523844115912">Graph index configuration parameters</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="24.46%" headers="mcps1.3.2.5.2.4.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p1723812465912">ef</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="60.39%" headers="mcps1.3.2.5.2.4.1.3 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p174132034174514">Queue size of the neighboring node during the query. A larger value indicates a higher query precision and slower query speed. The default value is <strong id="css_01_0467__b150109432411112">200</strong>.</p>
|
|
<p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p12238249592">Value range: (0, 100000]</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row9238341594"><td class="cellrowborder" valign="top" headers="mcps1.3.2.5.2.4.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p102381543592">max_scan_num</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" headers="mcps1.3.2.5.2.4.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p1502203510457">Maximum number of scanned nodes. A larger value indicates a higher query precision and slower query speed. The default value is <strong id="css_01_0467__b88019065411112">10000</strong>.</p>
|
|
<p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p15239184195911">Value range: (0, 1000000]</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row2023913425914"><td class="cellrowborder" valign="top" width="15.15%" headers="mcps1.3.2.5.2.4.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p15239124155914">IVF index configuration parameters</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="24.46%" headers="mcps1.3.2.5.2.4.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p12239164185913">nprobe</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="60.39%" headers="mcps1.3.2.5.2.4.1.3 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p11820136184520">Number of center points. A larger value indicates a higher query precision and slower query speed. The default value is <strong id="css_01_0467__b7016117111112">100</strong>.</p>
|
|
<p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p142399412593">Value range: (0, 100000]</p>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_section102341611718"><a name="css_01_0467__css_01_0123_en-us_topic_0000001268154489_section102341611718"></a><a name="css_01_0123_en-us_topic_0000001268154489_section102341611718"></a><h4 class="sectiontitle">Compound Query</h4><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p364401311819">Vector search can be used with other OpenSearch subqueries to implement a compound query, such as Boolean query.</p>
|
|
<p id="css_01_0467__p1969475052214">A Boolean query is in fact a post-filtering query method. Filtering and vector similarity-search are performed separately. Then, the results of the two are combined. The logic of combination is determined by clauses like must, should, and filter.</p>
|
|
<p id="css_01_0467__p53711361930">In the following example, the top 10 records whose <strong id="css_01_0467__b132111919211">my_label</strong> value is red are queried.</p>
|
|
<pre class="screen" id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_screen6703123515212">POST my_index/_search
|
|
{
|
|
"size": 10,
|
|
"query": {
|
|
"bool": {
|
|
"must": {
|
|
"vector": {
|
|
"my_vector": {
|
|
"vector": [1, 2],
|
|
"topk": 10
|
|
}
|
|
}
|
|
},
|
|
"filter": {
|
|
"term": { "my_label": "red" }
|
|
}
|
|
}
|
|
}
|
|
}</pre>
|
|
</div>
|
|
<div class="section" id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_section4946246546"><a name="css_01_0467__css_01_0123_en-us_topic_0000001268154489_section4946246546"></a><a name="css_01_0123_en-us_topic_0000001268154489_section4946246546"></a><h4 class="sectiontitle">ScriptScore Query</h4><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p191338162050">You can use <strong id="css_01_0467__b25807613511112">script_score</strong> to perform Nearest Neighbor Search (NSS) on vectors. The query syntax is provided below.</p>
|
|
<p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p1512359042">The pre-filtering condition can be any query. <strong id="css_01_0467__b164742354611112">script_score</strong> traverses only the pre-filtered results, calculates the vector similarity, and sorts and returns the results. This query method does not use vector indexes. Its performance depends on the size of the intermediate result set after the pre-filtering. If the pre-filtering condition is set to <strong id="css_01_0467__b12302172715213">match_all</strong>, brute-force search is performed on all data.</p>
|
|
<pre class="screen" id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_screen3512185915411">POST my_index/_search
|
|
{
|
|
"size":2,
|
|
"query": {
|
|
"script_score": {
|
|
"query": {
|
|
"match_all": {}
|
|
},
|
|
"script": {
|
|
"source": "vector_score",
|
|
"lang": "vector",
|
|
"params": {
|
|
"field": "my_vector",
|
|
"vector": [1.0, 2.0],
|
|
"metric": "euclidean"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}</pre>
|
|
|
|
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_table95121659546" frame="border" border="1" rules="all"><caption><b>Table 3 </b>script_score parameters</caption><thead align="left"><tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row1451214594419"><th align="left" class="cellrowborder" valign="top" width="30.3%" id="mcps1.3.4.5.2.3.1.1"><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p551216591840">Parameter</p>
|
|
</th>
|
|
<th align="left" class="cellrowborder" valign="top" width="69.69999999999999%" id="mcps1.3.4.5.2.3.1.2"><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p105128591413">Description</p>
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row135121591243"><td class="cellrowborder" valign="top" width="30.3%" headers="mcps1.3.4.5.2.3.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p651218591747">source</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="69.69999999999999%" headers="mcps1.3.4.5.2.3.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p1351225910417">Script description. Its value is <strong id="css_01_0467__b136820485811112">vector_score</strong> if the vector similarity is used for scoring.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row175123599411"><td class="cellrowborder" valign="top" width="30.3%" headers="mcps1.3.4.5.2.3.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p75121759143">lang</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="69.69999999999999%" headers="mcps1.3.4.5.2.3.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p1651235910417">Script syntax description. Its value is <strong id="css_01_0467__b123578638611112">vector</strong>.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row1651219599413"><td class="cellrowborder" valign="top" width="30.3%" headers="mcps1.3.4.5.2.3.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p1451211592047">field</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="69.69999999999999%" headers="mcps1.3.4.5.2.3.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p1351218596418">Vector field name</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row1551285917417"><td class="cellrowborder" valign="top" width="30.3%" headers="mcps1.3.4.5.2.3.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p165129591342">vector</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="69.69999999999999%" headers="mcps1.3.4.5.2.3.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p16512195915416">Vector data to be queried</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row751218591947"><td class="cellrowborder" valign="top" width="30.3%" headers="mcps1.3.4.5.2.3.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p18512659244">metric</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="69.69999999999999%" headers="mcps1.3.4.5.2.3.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p75126591544">Measurement method, which can be <strong id="css_01_0467__b81888063911112">euclidean</strong>, <strong id="css_01_0467__b168610271011112">inner_product</strong>, <strong id="css_01_0467__b29810089411112">cosine</strong>, and <strong id="css_01_0467__b195097108711112">hamming</strong>.</p>
|
|
<p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p35122592420">Default value: <strong id="css_01_0467__b72216260111112">euclidean</strong></p>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_section107953451661"><a name="css_01_0467__css_01_0123_en-us_topic_0000001268154489_section107953451661"></a><a name="css_01_0123_en-us_topic_0000001268154489_section107953451661"></a><h4 class="sectiontitle">Re-Score Query</h4><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p147213301172">If the <strong id="css_01_0467__b51617934411112">GRAPH_PQ</strong> or <strong id="css_01_0467__b72322025411112">IVF_GRAPH_PQ</strong> index is used, the query results are sorted based on the asymmetric distance calculated by PQ. CSS supports re-scoring and ranking of query results to improve the recall rate.</p>
|
|
<p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p1567411217323">Assuming that <strong id="css_01_0467__b80391733311112">my_index</strong> is a PQ index, an example of re-scoring the query results is as follows:</p>
|
|
<pre class="screen" id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_screen1639814155510">GET my_index/_search
|
|
{
|
|
"size": 10,
|
|
"query": {
|
|
"vector": {
|
|
"my_vector": {
|
|
"vector": [1.0, 2.0],
|
|
"topk": 100
|
|
}
|
|
}
|
|
},
|
|
"rescore": {
|
|
"window_size": 100,
|
|
"vector_rescore": {
|
|
"field": "my_vector",
|
|
"vector": [1.0, 2.0],
|
|
"metric": "euclidean"
|
|
}
|
|
}
|
|
}</pre>
|
|
|
|
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_table165271512103218" frame="border" border="1" rules="all"><caption><b>Table 4 </b>Rescore parameter description</caption><thead align="left"><tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row96748123320"><th align="left" class="cellrowborder" valign="top" width="30.3%" id="mcps1.3.5.5.2.3.1.1"><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p467481273214">Parameter</p>
|
|
</th>
|
|
<th align="left" class="cellrowborder" valign="top" width="69.69999999999999%" id="mcps1.3.5.5.2.3.1.2"><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p7674111213212">Description</p>
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row4674161215326"><td class="cellrowborder" valign="top" width="30.3%" headers="mcps1.3.5.5.2.3.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p136741112123210">window_size</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="69.69999999999999%" headers="mcps1.3.5.5.2.3.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p116742129325">Vector search returns <em id="css_01_0467__i24227187411112">topk</em> search results and ranks the first <em id="css_01_0467__i24820921911112">window_size</em> results.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row19674612133213"><td class="cellrowborder" valign="top" width="30.3%" headers="mcps1.3.5.5.2.3.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p16674171213212">field</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="69.69999999999999%" headers="mcps1.3.5.5.2.3.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p667431253217">Vector field name</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row6674151212329"><td class="cellrowborder" valign="top" width="30.3%" headers="mcps1.3.5.5.2.3.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p14674171273210">vector</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="69.69999999999999%" headers="mcps1.3.5.5.2.3.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p176748125322">Vector data to be queried</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_row7674121216327"><td class="cellrowborder" valign="top" width="30.3%" headers="mcps1.3.5.5.2.3.1.1 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p167419129328">metric</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="69.69999999999999%" headers="mcps1.3.5.5.2.3.1.2 "><p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p1767451253213">Measurement method, which can be <strong id="css_01_0467__b167409089911112">euclidean</strong>, <strong id="css_01_0467__b134635133911112">inner_product</strong>, <strong id="css_01_0467__b198525270611112">cosine</strong>, and <strong id="css_01_0467__b35681700411112">hamming</strong>.</p>
|
|
<p id="css_01_0467__css_01_0123_en-us_topic_0000001268154489_p5674131217326">Default value: <strong id="css_01_0467__b176194197811112">euclidean</strong></p>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="css_01_0467__css_01_0123_section102071126171611"><a name="css_01_0467__css_01_0123_section102071126171611"></a><a name="css_01_0123_section102071126171611"></a><h4 class="sectiontitle">Painless Syntax Extension</h4><p id="css_01_0467__css_01_0123_p177861335101615">CSS extension supports multiple vector distance calculation functions, which can be directly used in customized painless scripts to build flexible re-score formulas.</p>
|
|
<p id="css_01_0467__css_01_0123_p18965620112713">The following is an example:</p>
|
|
<pre class="screen" id="css_01_0467__css_01_0123_screen11315195710305">POST my_index/_search
|
|
{
|
|
"size": 10,
|
|
"query": {
|
|
"script_score": {
|
|
"query": {
|
|
"match_all": {}
|
|
},
|
|
"script": {
|
|
"source": "1 / (1 + euclidean(params.vector, doc[params.field]))",
|
|
"params": {
|
|
"field": "my_vector",
|
|
"vector": [1, 2]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}</pre>
|
|
|
|
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="css_01_0467__css_01_0123_table17610185023516" frame="border" border="1" rules="all"><caption><b>Table 5 </b>Supported distance vector calculation functions</caption><thead align="left"><tr id="css_01_0467__css_01_0123_row461012507354"><th align="left" class="cellrowborder" valign="top" width="34.32%" id="mcps1.3.6.5.2.3.1.1"><p id="css_01_0467__css_01_0123_p196101850203512">Function Signature</p>
|
|
</th>
|
|
<th align="left" class="cellrowborder" valign="top" width="65.68%" id="mcps1.3.6.5.2.3.1.2"><p id="css_01_0467__css_01_0123_p1061095020358">Description</p>
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr id="css_01_0467__css_01_0123_row1261045014357"><td class="cellrowborder" valign="top" width="34.32%" headers="mcps1.3.6.5.2.3.1.1 "><p id="css_01_0467__css_01_0123_p13610450103520">euclidean(Float[], DocValues)</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="65.68%" headers="mcps1.3.6.5.2.3.1.2 "><p id="css_01_0467__css_01_0123_p2610125033511">Euclidean distance function</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="css_01_0467__css_01_0123_row961085053513"><td class="cellrowborder" valign="top" width="34.32%" headers="mcps1.3.6.5.2.3.1.1 "><p id="css_01_0467__css_01_0123_p1610205014351">cosine(Float[], DocValues)</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="65.68%" headers="mcps1.3.6.5.2.3.1.2 "><p id="css_01_0467__css_01_0123_p6610750143515">Cosine similarity function</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="css_01_0467__css_01_0123_row1961015501351"><td class="cellrowborder" valign="top" width="34.32%" headers="mcps1.3.6.5.2.3.1.1 "><p id="css_01_0467__css_01_0123_p46101950163517">innerproduct(Float[], DocValues)</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="65.68%" headers="mcps1.3.6.5.2.3.1.2 "><p id="css_01_0467__css_01_0123_p461015012354">Inner product function</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="css_01_0467__css_01_0123_row98852044174013"><td class="cellrowborder" valign="top" width="34.32%" headers="mcps1.3.6.5.2.3.1.1 "><p id="css_01_0467__css_01_0123_p13885174412404">hamming(String, DocValues)</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="65.68%" headers="mcps1.3.6.5.2.3.1.2 "><p id="css_01_0467__css_01_0123_p18852044114019">Hamming distance function Only vectors whose <strong id="css_01_0467__b112483772111112">dim_type</strong> is <strong id="css_01_0467__b174604109811112">binary</strong> are supported. The input query vector must be a Base64-encoded character string.</p>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="familylinks">
|
|
<div class="parentlink"><strong>Parent topic:</strong> <a href="css_01_0464.html">Configuring Vector Search for OpenSearch Clusters</a></div>
|
|
</div>
|
|
</div>
|
|
|