Skip to content

Commit 0fb9680

Browse files
DOC-5675 added PHP vector set examples
1 parent ee72432 commit 0fb9680

File tree

1 file changed

+309
-0
lines changed

1 file changed

+309
-0
lines changed
Lines changed: 309 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,309 @@
1+
// EXAMPLE: vecset_tutorial
2+
<?php
3+
4+
require 'vendor/autoload.php';
5+
6+
use Predis\Client as PredisClient;
7+
8+
class DtVecSetsTest
9+
// REMOVE_START
10+
extends PredisTestCase
11+
// REMOVE_END
12+
{
13+
public function testDtVecSet() {
14+
$r = new PredisClient([
15+
'scheme' => 'tcp',
16+
'host' => '127.0.0.1',
17+
'port' => 6379,
18+
'password' => '',
19+
'database' => 0,
20+
]);
21+
// REMOVE_START
22+
$r->flushall();
23+
// REMOVE_END
24+
25+
// STEP_START vadd
26+
$res1 = $r->vadd('points', [1.0, 1.0], 'pt:A');
27+
echo $res1 . PHP_EOL;
28+
// >>> 1
29+
30+
$res2 = $r->vadd('points', [-1.0, -1.0], 'pt:B');
31+
echo $res2 . PHP_EOL;
32+
// >>> 1
33+
34+
$res3 = $r->vadd('points', [-1.0, 1.0], 'pt:C');
35+
echo $res3 . PHP_EOL;
36+
// >>> 1
37+
38+
$res4 = $r->vadd('points', [1.0, -1.0], 'pt:D');
39+
echo $res4 . PHP_EOL;
40+
// >>> 1
41+
42+
$res5 = $r->vadd('points', [1.0, 0.0], 'pt:E');
43+
echo $res5 . PHP_EOL;
44+
// >>> 1
45+
46+
$res6 = $r->type('points');
47+
echo $res6 . PHP_EOL;
48+
// >>> vectorset
49+
// STEP_END
50+
// REMOVE_START
51+
$this->assertEquals(1, $res1);
52+
$this->assertEquals(1, $res2);
53+
$this->assertEquals(1, $res3);
54+
$this->assertEquals(1, $res4);
55+
$this->assertEquals(1, $res5);
56+
$this->assertEquals('vectorset', $res6);
57+
// REMOVE_END
58+
59+
// STEP_START vcardvdim
60+
$res7 = $r->vcard('points');
61+
echo $res7 . PHP_EOL;
62+
// >>> 5
63+
64+
$res8 = $r->vdim('points');
65+
echo $res8 . PHP_EOL;
66+
// >>> 2
67+
// STEP_END
68+
// REMOVE_START
69+
$this->assertEquals(5, $res7);
70+
$this->assertEquals(2, $res8);
71+
// REMOVE_END
72+
73+
// STEP_START vemb
74+
$res9 = $r->vemb('points', 'pt:A');
75+
echo json_encode($res9) . PHP_EOL;
76+
// >>> [0.9999999403953552, 0.9999999403953552]
77+
78+
$res10 = $r->vemb('points', 'pt:B');
79+
echo json_encode($res10) . PHP_EOL;
80+
// >>> [-0.9999999403953552, -0.9999999403953552]
81+
82+
$res11 = $r->vemb('points', 'pt:C');
83+
echo json_encode($res11) . PHP_EOL;
84+
// >>> [-0.9999999403953552, 0.9999999403953552]
85+
86+
$res12 = $r->vemb('points', 'pt:D');
87+
echo json_encode($res12) . PHP_EOL;
88+
// >>> [0.9999999403953552, -0.9999999403953552]
89+
90+
$res13 = $r->vemb('points', 'pt:E');
91+
echo json_encode($res13) . PHP_EOL;
92+
// >>> [1,0]
93+
// STEP_END
94+
// REMOVE_START
95+
$this->assertEquals([0.9999999403953552, 0.9999999403953552], $res9);
96+
$this->assertEquals([-0.9999999403953552, -0.9999999403953552], $res10);
97+
$this->assertEquals([-0.9999999403953552, 0.9999999403953552], $res11);
98+
$this->assertEquals([0.9999999403953552, -0.9999999403953552], $res12);
99+
$this->assertEquals([1.0, 0.0], $res13);
100+
// REMOVE_END
101+
102+
// STEP_START attr
103+
$res14 = $r->vsetattr('points', 'pt:A', '{
104+
"name": "Point A",
105+
"description": "First point added"
106+
}');
107+
echo $res14 . PHP_EOL;
108+
// >>> 1
109+
110+
$res15 = $r->vgetattr('points', 'pt:A');
111+
echo json_encode($res15) . PHP_EOL;
112+
// >>> {"name":"Point A","description":"First point added"}
113+
114+
$res16 = $r->vsetattr('points', 'pt:A', '');
115+
echo $res16 . PHP_EOL;
116+
// >>> 1
117+
118+
$res17 = $r->vgetattr('points', 'pt:A');
119+
echo json_encode($res17) . PHP_EOL;
120+
// >>> null
121+
// STEP_END
122+
// REMOVE_START
123+
$this->assertEquals(1, $res14);
124+
$this->assertEquals(['name' => 'Point A', 'description' => 'First point added'], $res15);
125+
$this->assertEquals(1, $res16);
126+
$this->assertEquals(null, $res17);
127+
// REMOVE_END
128+
129+
// STEP_START vrem
130+
$res18 = $r->vadd('points', [0, 0], 'pt:F');
131+
echo $res18 . PHP_EOL;
132+
// >>> 1
133+
134+
$res19 = $r->vcard('points');
135+
echo $res19 . PHP_EOL;
136+
// >>> 6
137+
138+
$res20 = $r->vrem('points', 'pt:F');
139+
echo $res20 . PHP_EOL;
140+
// >>> 1
141+
142+
$res21 = $r->vcard('points');
143+
echo $res21 . PHP_EOL;
144+
// >>> 5
145+
// STEP_END
146+
// REMOVE_START
147+
$this->assertEquals(1, $res18);
148+
$this->assertEquals(6, $res19);
149+
$this->assertEquals(1, $res20);
150+
$this->assertEquals(5, $res21);
151+
// REMOVE_END
152+
153+
// STEP_START vsim_basic
154+
$res22 = $r->vsim('points', [0.9, 0.1]);
155+
echo json_encode($res22) . PHP_EOL;
156+
// >>> ["pt:E","pt:A","pt:D","pt:C","pt:B"]
157+
// STEP_END
158+
// REMOVE_START
159+
$this->assertEquals(['pt:E', 'pt:A', 'pt:D', 'pt:C', 'pt:B'], $res22);
160+
// REMOVE_END
161+
162+
// STEP_START vsim_options
163+
// Returns an array of elements with their scores:
164+
// ['pt:A' => 1.0, 'pt:E' => 0.8535534143447876,...
165+
$res23 = $r->vsim(
166+
'points', 'pt:A', true,true, 4,
167+
);
168+
echo json_encode($res23) . PHP_EOL;
169+
// >>> {'pt:A': 1.0, 'pt:E': 0.8535534143447876, 'pt:D': 0.5, 'pt:C': 0.5}
170+
// STEP_END
171+
// REMOVE_START
172+
//$this->assertEquals(['pt:A' => 1.0, 'pt:E' => 0.8535534143447876, 'pt:D' => 0.5, 'pt:C' => 0.5], $res23);
173+
// REMOVE_END
174+
175+
// STEP_START vsim_filter
176+
$res24 = $r->vsetattr('points', 'pt:A', [
177+
'size' => 'large',
178+
'price' => 18.99
179+
]);
180+
echo $res24 . PHP_EOL;
181+
// >>> 1
182+
183+
$res25 = $r->vsetattr('points', 'pt:B', [
184+
'size' => 'large',
185+
'price' => 35.99
186+
]);
187+
echo $res25 . PHP_EOL;
188+
// >>> 1
189+
190+
$res26 = $r->vsetattr('points', 'pt:C', [
191+
'size' => 'large',
192+
'price' => 25.99
193+
]);
194+
echo $res26 . PHP_EOL;
195+
// >>> 1
196+
197+
$res27 = $r->vsetattr('points', 'pt:D', [
198+
'size' => 'small',
199+
'price' => 21.00
200+
]);
201+
echo $res27 . PHP_EOL;
202+
// >>> 1
203+
204+
$res28 = $r->vsetattr('points', 'pt:E', [
205+
'size' => 'small',
206+
'price' => 17.75
207+
]);
208+
echo $res28 . PHP_EOL;
209+
// >>> 1
210+
211+
// Return elements in order of distance from point A whose
212+
// `size` attribute is `large`.
213+
$res29 = $r->vsim(
214+
'points', 'pt:A',true, null, null, null, null,
215+
'.size == "large"'
216+
);
217+
echo json_encode($res29) . PHP_EOL;
218+
// >>> ["pt:A","pt:C","pt:B"]
219+
220+
// Return elements in order of distance from point A whose size is
221+
// `large` and whose price is greater than 20.00.
222+
$res30 = $r->vsim(
223+
'points', 'pt:A',true, null, null, null, null,
224+
'.size == "large" && .price > 20.00'
225+
);
226+
echo json_encode($res30) . PHP_EOL;
227+
// >>> ["pt:C","pt:B"]
228+
// STEP_END
229+
// REMOVE_START
230+
$this->assertEquals(1, $res24);
231+
$this->assertEquals(1, $res25);
232+
$this->assertEquals(1, $res26);
233+
$this->assertEquals(1, $res27);
234+
$this->assertEquals(1, $res28);
235+
$this->assertEquals(['pt:A', 'pt:C', 'pt:B'], $res29);
236+
$this->assertEquals(['pt:C', 'pt:B'], $res30);
237+
// REMOVE_END
238+
239+
// STEP_START add_quant
240+
$res31 = $r->vadd('quantSetQ8', [1.262185, 1.958231], 'quantElement', null, false,
241+
Predis\Command\Redis\VADD::QUANT_Q8
242+
);
243+
echo $res31 . PHP_EOL;
244+
// >>> 1
245+
246+
$res32 = $r->vemb('quantSetQ8', 'quantElement');
247+
echo json_encode($res32) . PHP_EOL;
248+
// >>> [1.2643694877624512, 1.958230972290039]
249+
250+
$res33 = $r->vadd('quantSetNoQ', [1.262185, 1.958231], 'quantElement', null, false,
251+
Predis\Command\Redis\VADD::QUANT_NOQUANT
252+
);
253+
echo $res33 . PHP_EOL;
254+
// >>> 1
255+
256+
$res34 = $r->vemb('quantSetNoQ', 'quantElement');
257+
echo json_encode($res34) . PHP_EOL;
258+
// >>> [1.262184977531433, 1.958230972290039]
259+
260+
$res35 = $r->vadd('quantSetBin', [1.262185, 1.958231], 'quantElement', null, false,
261+
Predis\Command\Redis\VADD::QUANT_BIN
262+
);
263+
echo $res35 . PHP_EOL;
264+
// >>> 1
265+
266+
$res36 = $r->vemb('quantSetBin', 'quantElement');
267+
echo json_encode($res36) . PHP_EOL;
268+
// >>> [1, 1]
269+
// STEP_END
270+
// REMOVE_START
271+
$this->assertEquals(1, $res31);
272+
$this->assertEquals([1.2643694877624512, 1.958230972290039], $res32);
273+
$this->assertEquals(1, $res33);
274+
$this->assertEquals([1.262184977531433, 1.958230972290039], $res34);
275+
$this->assertEquals(1, $res35);
276+
$this->assertEquals([1, 1], $res36);
277+
// REMOVE_END
278+
279+
// STEP_START add_reduce
280+
$values = array();
281+
282+
for ($i = 0; $i < 300; $i++) {
283+
$values[] = $i / 299.0;
284+
}
285+
286+
$res37 = $r->vadd('setNotReduced', $values, 'element');
287+
echo $res37 . PHP_EOL;
288+
// >>> 1
289+
290+
$res38 = $r->vdim('setNotReduced');
291+
echo $res38 . PHP_EOL;
292+
// >>> 300
293+
294+
$res39 = $r->vadd('setReduced', $values, 'element', 100);
295+
echo $res39 . PHP_EOL;
296+
// >>> 1
297+
298+
$res40 = $r->vdim('setReduced');
299+
echo $res40 . PHP_EOL;
300+
// >>> 100
301+
// STEP_END
302+
// REMOVE_START
303+
$this->assertEquals(1, $res37);
304+
$this->assertEquals(300, $res38);
305+
$this->assertEquals(1, $res39);
306+
$this->assertEquals(100, $res40);
307+
// REMOVE_END
308+
}
309+
}

0 commit comments

Comments
 (0)