Files
doc-exports/docs/css/umn/css_01_0127.html
zhengxiu 93d856d5c5 css umn 25.6.0 version
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com>
Co-authored-by: zhengxiu <zhengxiu@huawei.com>
Co-committed-by: zhengxiu <zhengxiu@huawei.com>
2025-11-25 11:34:43 +00:00

210 lines
18 KiB
HTML

<a name="EN-US_TOPIC_0000001955726498"></a><a name="EN-US_TOPIC_0000001955726498"></a>
<h1 class="topictitle1">Sample Python Code for Vector Search</h1>
<div id="body0000001955726498"><p id="EN-US_TOPIC_0000001955726498__en-us_topic_0000001965496793_en-us_topic_0000001261749932_p143381112172510">OpenSearch provides standard REST APIs and clients developed using Java and Python.</p>
<p id="EN-US_TOPIC_0000001955726498__en-us_topic_0000001965496793_en-us_topic_0000001261749932_p1675193372415">This section provides a sample of Python code for creating vector indexes, and importing and querying vector data. It shows how to use the client to implement vector search.</p>
<div class="section" id="EN-US_TOPIC_0000001955726498__en-us_topic_0000001965496793_en-us_topic_0000001261749932_section1864223419264"><h4 class="sectiontitle">Prerequisites</h4><p id="EN-US_TOPIC_0000001955726498__en-us_topic_0000001965496793_en-us_topic_0000001261749932_p1299195810328">The Python dependency package has been installed on the client. If it is not installed, run the following command to install it:</p>
<pre class="screen" id="EN-US_TOPIC_0000001955726498__en-us_topic_0000001965496793_en-us_topic_0000001261749932_screen1932333123212"># OpenSearch 2.19.0
pip install opensearch-py==2.8.0
# OpenSearch 1.3.6
pip install opensearch-py==1.1.0</pre>
</div>
<div class="section" id="EN-US_TOPIC_0000001955726498__en-us_topic_0000001965496793_en-us_topic_0000001261749932_section10885342132619"><h4 class="sectiontitle">Sample Code</h4><div class="codecoloring" codetype="Python" id="EN-US_TOPIC_0000001955726498__en-us_topic_0000001965496793_screen842883191417"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span>
<span class="normal">48</span>
<span class="normal">49</span>
<span class="normal">50</span>
<span class="normal">51</span>
<span class="normal">52</span>
<span class="normal">53</span>
<span class="normal">54</span>
<span class="normal">55</span>
<span class="normal">56</span>
<span class="normal">57</span>
<span class="normal">58</span>
<span class="normal">59</span>
<span class="normal">60</span>
<span class="normal">61</span>
<span class="normal">62</span>
<span class="normal">63</span>
<span class="normal">64</span>
<span class="normal">65</span>
<span class="normal">66</span>
<span class="normal">67</span>
<span class="normal">68</span>
<span class="normal">69</span>
<span class="normal">70</span>
<span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span>
<span class="normal">81</span>
<span class="normal">82</span>
<span class="normal">83</span>
<span class="normal">84</span>
<span class="normal">85</span>
<span class="normal">86</span>
<span class="normal">87</span>
<span class="normal">88</span>
<span class="normal">89</span>
<span class="normal">90</span>
<span class="normal">91</span>
<span class="normal">92</span>
<span class="normal">93</span>
<span class="normal">94</span></pre></div></td><td class="code"><div><pre><span></span><span class="kn">from</span> <span class="nn">opensearchpy</span> <span class="kn">import</span> <span class="n">OpenSearch</span>
<span class="c1"># Create a client.</span>
<span class="k">def</span> <span class="nf">get_client</span><span class="p">(</span><span class="n">hosts</span><span class="p">:</span> <span class="nb">list</span><span class="p">,</span> <span class="n">user</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="n">user</span> <span class="ow">and</span> <span class="n">password</span><span class="p">:</span>
<span class="k">return</span> <span class="n">OpenSearch</span><span class="p">(</span><span class="n">hosts</span><span class="p">,</span> <span class="n">http_auth</span><span class="o">=</span><span class="p">(</span><span class="n">user</span><span class="p">,</span> <span class="n">password</span><span class="p">),</span> <span class="n">verify_certs</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">ssl_show_warn</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">OpenSearch</span><span class="p">(</span><span class="n">hosts</span><span class="p">)</span>
<span class="c1"># Create an index table.</span>
<span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="n">client</span><span class="p">:</span> <span class="n">OpenSearch</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
<span class="c1"># Index mapping information</span>
<span class="n">index_mapping</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;settings&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;index&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;vector&quot;</span><span class="p">:</span> <span class="s2">&quot;true&quot;</span><span class="p">,</span> <span class="c1"># Enable the vector feature.</span>
<span class="s2">&quot;number_of_shards&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="c1"># Set the number of index shards as needed.</span>
<span class="s2">&quot;number_of_replicas&quot;</span><span class="p">:</span> <span class="mi">0</span> <span class="c1"># Set the number of index replicas as needed.</span>
<span class="p">}</span>
<span class="p">},</span>
<span class="s2">&quot;mappings&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;properties&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;my_vector&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;vector&quot;</span><span class="p">,</span>
<span class="s2">&quot;dimension&quot;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
<span class="s2">&quot;indexing&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;algorithm&quot;</span><span class="p">:</span> <span class="s2">&quot;GRAPH&quot;</span><span class="p">,</span>
<span class="s2">&quot;metric&quot;</span><span class="p">:</span> <span class="s2">&quot;euclidean&quot;</span>
<span class="p">}</span>
<span class="c1"># Other fields can be added if necessary.</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">indices</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">index</span><span class="o">=</span><span class="n">index</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">index_mapping</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;create index result: &quot;</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
<span class="c1"># Write data.</span>
<span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="n">client</span><span class="p">:</span> <span class="n">OpenSearch</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">vecs</span><span class="p">:</span> <span class="nb">list</span><span class="p">,</span> <span class="n">bulk_size</span><span class="o">=</span><span class="mi">500</span><span class="p">):</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">vecs</span><span class="p">),</span> <span class="n">bulk_size</span><span class="p">):</span>
<span class="n">actions</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">for</span> <span class="n">vec</span> <span class="ow">in</span> <span class="n">vecs</span><span class="p">[</span><span class="n">i</span><span class="p">:</span> <span class="n">i</span> <span class="o">+</span> <span class="n">bulk_size</span><span class="p">]:</span>
<span class="n">actions</span> <span class="o">+=</span> <span class="s1">'{&quot;index&quot;: {&quot;_index&quot;: &quot;</span><span class="si">%s</span><span class="s1">&quot;}}</span><span class="se">\n</span><span class="s1">'</span> <span class="o">%</span> <span class="n">index</span>
<span class="n">actions</span> <span class="o">+=</span> <span class="s1">'{&quot;my_vector&quot;: </span><span class="si">%s</span><span class="s1">}</span><span class="se">\n</span><span class="s1">'</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">vec</span><span class="p">)</span>
<span class="n">client</span><span class="o">.</span><span class="n">bulk</span><span class="p">(</span><span class="n">body</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span> <span class="n">request_timeout</span><span class="o">=</span><span class="mi">3600</span><span class="p">)</span>
<span class="n">client</span><span class="o">.</span><span class="n">indices</span><span class="o">.</span><span class="n">refresh</span><span class="p">(</span><span class="n">index</span><span class="o">=</span><span class="n">index</span><span class="p">,</span> <span class="n">request_timeout</span><span class="o">=</span><span class="mi">3600</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;write index success!&quot;</span><span class="p">)</span>
<span class="c1"># Query a vector index.</span>
<span class="k">def</span> <span class="nf">search</span><span class="p">(</span><span class="n">client</span><span class="p">:</span> <span class="n">OpenSearch</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="nb">list</span><span class="p">,</span> <span class="n">size</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
<span class="c1"># Query statement. Select an appropriate query method.</span>
<span class="n">query_body</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;size&quot;</span><span class="p">:</span> <span class="n">size</span><span class="p">,</span>
<span class="s2">&quot;query&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;vector&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;my_vector&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;vector&quot;</span><span class="p">:</span> <span class="n">query</span><span class="p">,</span>
<span class="s2">&quot;topk&quot;</span><span class="p">:</span> <span class="n">size</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">index</span><span class="o">=</span><span class="n">index</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">query_body</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;search index result: &quot;</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
<span class="c1"># Delete an index.</span>
<span class="k">def</span> <span class="nf">delete</span><span class="p">(</span><span class="n">client</span><span class="p">:</span> <span class="n">OpenSearch</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">indices</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">index</span><span class="o">=</span><span class="n">index</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;delete index result: &quot;</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
<span class="n">os_client</span> <span class="o">=</span> <span class="n">get_client</span><span class="p">(</span><span class="n">hosts</span><span class="o">=</span><span class="p">[</span><span class="s1">'http://xx.xx.xx.xx:9200'</span><span class="p">])</span>
<span class="c1"># For a security-mode cluster that uses HTTPS, run the following:</span>
<span class="c1"># os_client = get_client(hosts=['https://xx.xx.xx.xx:9200', 'https://xx.xx.xx.xx:9200'], user='xxxxx', password='xxxxx')</span>
<span class="c1"># For a security-mode cluster with HTTPS disabled, run the following:</span>
<span class="c1"># os_client = get_client(hosts=['http://xx.xx.xx.xx:9200', 'http://xx.xx.xx.xx:9200'], user='xxxxx', password='xxxxx')</span>
<span class="c1"># Test the index name.</span>
<span class="n">index_name</span> <span class="o">=</span> <span class="s2">&quot;my_index&quot;</span>
<span class="c1"># Create an index.</span>
<span class="n">create</span><span class="p">(</span><span class="n">os_client</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="n">index_name</span><span class="p">)</span>
<span class="c1"># Write data.</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">[[</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">],</span> <span class="p">[</span><span class="mf">2.0</span><span class="p">,</span> <span class="mf">2.0</span><span class="p">],</span> <span class="p">[</span><span class="mf">3.0</span><span class="p">,</span> <span class="mf">3.0</span><span class="p">]]</span>
<span class="n">write</span><span class="p">(</span><span class="n">os_client</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="n">index_name</span><span class="p">,</span> <span class="n">vecs</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>
<span class="c1"># Query an index.</span>
<span class="n">query_vector</span> <span class="o">=</span> <span class="p">[</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">]</span>
<span class="n">search</span><span class="p">(</span><span class="n">os_client</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="n">index_name</span><span class="p">,</span> <span class="n">query</span><span class="o">=</span><span class="n">query_vector</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
<span class="c1"># Delete an index.</span>
<span class="n">delete</span><span class="p">(</span><span class="n">os_client</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="n">index_name</span><span class="p">)</span>
</pre></div></td></tr></table></div>
</div>
</div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="css_01_0101.html">Configuring Vector Search for OpenSearch Clusters</a></div>
</div>
</div>