Skip to content

Commit 1779fee

Browse files
authored
Add tag support (#48)
* Remove unused geolocation field * Add support for tags * Update docs * Fix CS
1 parent b3c9ed0 commit 1779fee

File tree

16 files changed

+248
-23
lines changed

16 files changed

+248
-23
lines changed

docs-src/indexing.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ They are instantiated like this:
1010
new TextField('author', 'Charles Dickens');
1111
new NumericField('price', 9.99);
1212
new GeoField('place', new GeoLocation(-77.0366, 38.8977));
13+
new TagField('color', 'red');
1314
```
1415

1516
Fields can also be made with the FieldFactory class:
@@ -23,6 +24,9 @@ FieldFactory::make('price', 9.99);
2324
2425
// Alternative syntax for: new GeoField('place', new GeoLocation(-77.0366, 38.8977));
2526
FieldFactory::make('place', new GeoLocation(-77.0366, 38.8977));
27+
28+
// Alternative syntax for: new TagField('color', 'red');
29+
FieldFactory::make('color', 'red');
2630
```
2731

2832
## Adding Documents
@@ -35,6 +39,7 @@ $bookIndex->add([
3539
new TextField('author', 'Charles Dickens'),
3640
new NumericField('price', 9.99),
3741
new GeoField('place', new GeoLocation(-77.0366, 38.8977)),
42+
new TagField('color', 'red'),
3843
]);
3944
```
4045

@@ -46,6 +51,7 @@ $bookIndex->add([
4651
'author' => 'Charles Dickens',
4752
'price' => 9.99,
4853
'place' => new GeoLocation(-77.0366, 38.8977),
54+
'color' => new TagField('color', 'red'),,
4955
]);
5056
```
5157

docs-src/searching.md

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,40 @@ $result = $bookIndex->search('two cities', true);
1919
$result->documents(); // Array of arrays.
2020
```
2121

22+
## Filtering Tag Fields
23+
24+
Tag fields can be filtered with the index's tagFilter method.
25+
26+
Specifying multiple tags creates a union of documents.
27+
28+
```php-inline
29+
$result = $bookIndex
30+
->tagFilter('color', ['blue', 'red'])
31+
->search('two cities');
32+
```
33+
34+
Use multiple separate tagFilter calls to create an intersection of documents.
35+
36+
```php-inline
37+
$result = $bookIndex
38+
->tagFilter('color', ['blue'])
39+
->tagFilter('color', ['red'])
40+
->search('two cities');
41+
```
42+
2243
## Filtering Numeric Fields
2344

24-
Numeric fields can be filtered with the index's filter method.
45+
Numeric fields can be filtered with the index's numericFilter method.
2546

2647
```php-inline
2748
$result = $bookIndex
28-
->filter('price', 4.99, 19.99)
49+
->numericFilter('price', 4.99, 19.99)
2950
->search('two cities');
3051
```
3152

3253
## Filtering Geo Fields
3354

34-
Numeric fields can be filtered with the index's filter method.
55+
Numeric fields can be filtered with the index's geoFilter method.
3556

3657
```php-inline
3758
$result = $bookIndex

docs/indexing/index.html

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,7 @@ <h2 id="field-types">Field Types<a class="headerlink" href="#field-types" title=
500500
<div class="codehilite"><pre><span></span><span class="k">new</span> <span class="nx">TextField</span><span class="p">(</span><span class="s1">&#39;author&#39;</span><span class="p">,</span> <span class="s1">&#39;Charles Dickens&#39;</span><span class="p">);</span>
501501
<span class="k">new</span> <span class="nx">NumericField</span><span class="p">(</span><span class="s1">&#39;price&#39;</span><span class="p">,</span> <span class="mf">9.99</span><span class="p">);</span>
502502
<span class="k">new</span> <span class="nx">GeoField</span><span class="p">(</span><span class="s1">&#39;place&#39;</span><span class="p">,</span> <span class="k">new</span> <span class="nx">GeoLocation</span><span class="p">(</span><span class="o">-</span><span class="mf">77.0366</span><span class="p">,</span> <span class="mf">38.8977</span><span class="p">));</span>
503+
<span class="k">new</span> <span class="nx">TagField</span><span class="p">(</span><span class="s1">&#39;color&#39;</span><span class="p">,</span> <span class="s1">&#39;red&#39;</span><span class="p">);</span>
503504
</pre></div>
504505

505506
<p>Fields can also be made with the FieldFactory class:</p>
@@ -511,6 +512,9 @@ <h2 id="field-types">Field Types<a class="headerlink" href="#field-types" title=
511512

512513
<span class="c1">// Alternative syntax for: new GeoField(&#39;place&#39;, new GeoLocation(-77.0366, 38.8977));</span>
513514
<span class="nx">FieldFactory</span><span class="o">::</span><span class="na">make</span><span class="p">(</span><span class="s1">&#39;place&#39;</span><span class="p">,</span> <span class="k">new</span> <span class="nx">GeoLocation</span><span class="p">(</span><span class="o">-</span><span class="mf">77.0366</span><span class="p">,</span> <span class="mf">38.8977</span><span class="p">));</span>
515+
516+
<span class="c1">// Alternative syntax for: new TagField(&#39;color&#39;, &#39;red&#39;);</span>
517+
<span class="nx">FieldFactory</span><span class="o">::</span><span class="na">make</span><span class="p">(</span><span class="s1">&#39;color&#39;</span><span class="p">,</span> <span class="s1">&#39;red&#39;</span><span class="p">);</span>
514518
</pre></div>
515519

516520
<h2 id="adding-documents">Adding Documents<a class="headerlink" href="#adding-documents" title="Permanent link">&para;</a></h2>
@@ -520,6 +524,7 @@ <h2 id="adding-documents">Adding Documents<a class="headerlink" href="#adding-do
520524
<span class="k">new</span> <span class="nx">TextField</span><span class="p">(</span><span class="s1">&#39;author&#39;</span><span class="p">,</span> <span class="s1">&#39;Charles Dickens&#39;</span><span class="p">),</span>
521525
<span class="k">new</span> <span class="nx">NumericField</span><span class="p">(</span><span class="s1">&#39;price&#39;</span><span class="p">,</span> <span class="mf">9.99</span><span class="p">),</span>
522526
<span class="k">new</span> <span class="nx">GeoField</span><span class="p">(</span><span class="s1">&#39;place&#39;</span><span class="p">,</span> <span class="k">new</span> <span class="nx">GeoLocation</span><span class="p">(</span><span class="o">-</span><span class="mf">77.0366</span><span class="p">,</span> <span class="mf">38.8977</span><span class="p">)),</span>
527+
<span class="k">new</span> <span class="nx">TagField</span><span class="p">(</span><span class="s1">&#39;color&#39;</span><span class="p">,</span> <span class="s1">&#39;red&#39;</span><span class="p">),</span>
523528
<span class="p">]);</span>
524529
</pre></div>
525530

@@ -529,6 +534,7 @@ <h2 id="adding-documents">Adding Documents<a class="headerlink" href="#adding-do
529534
<span class="s1">&#39;author&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;Charles Dickens&#39;</span><span class="p">,</span>
530535
<span class="s1">&#39;price&#39;</span> <span class="o">=&gt;</span> <span class="mf">9.99</span><span class="p">,</span>
531536
<span class="s1">&#39;place&#39;</span> <span class="o">=&gt;</span> <span class="k">new</span> <span class="nx">GeoLocation</span><span class="p">(</span><span class="o">-</span><span class="mf">77.0366</span><span class="p">,</span> <span class="mf">38.8977</span><span class="p">),</span>
537+
<span class="s1">&#39;color&#39;</span> <span class="o">=&gt;</span> <span class="k">new</span> <span class="nx">TagField</span><span class="p">(</span><span class="s1">&#39;color&#39;</span><span class="p">,</span> <span class="s1">&#39;red&#39;</span><span class="p">),,</span>
532538
<span class="p">]);</span>
533539
</pre></div>
534540

docs/search/search_index.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

docs/searching/index.html

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,13 @@
325325
Simple Text Search
326326
</a>
327327

328+
</li>
329+
330+
<li class="md-nav__item">
331+
<a href="#filtering-tag-fields" title="Filtering Tag Fields" class="md-nav__link">
332+
Filtering Tag Fields
333+
</a>
334+
328335
</li>
329336

330337
<li class="md-nav__item">
@@ -458,6 +465,13 @@
458465
Simple Text Search
459466
</a>
460467

468+
</li>
469+
470+
<li class="md-nav__item">
471+
<a href="#filtering-tag-fields" title="Filtering Tag Fields" class="md-nav__link">
472+
Filtering Tag Fields
473+
</a>
474+
461475
</li>
462476

463477
<li class="md-nav__item">
@@ -536,15 +550,30 @@ <h2 id="simple-text-search">Simple Text Search<a class="headerlink" href="#simpl
536550
<span class="nv">$result</span><span class="o">-&gt;</span><span class="na">documents</span><span class="p">();</span> <span class="c1">// Array of arrays.</span>
537551
</pre></div>
538552

553+
<h2 id="filtering-tag-fields">Filtering Tag Fields<a class="headerlink" href="#filtering-tag-fields" title="Permanent link">&para;</a></h2>
554+
<p>Tag fields can be filtered with the index's tagFilter method. </p>
555+
<p>Specifying multiple tags creates a union of documents.</p>
556+
<div class="codehilite"><pre><span></span><span class="nv">$result</span> <span class="o">=</span> <span class="nv">$bookIndex</span>
557+
<span class="o">-&gt;</span><span class="na">tagFilter</span><span class="p">(</span><span class="s1">&#39;color&#39;</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;blue&#39;</span><span class="p">,</span> <span class="s1">&#39;red&#39;</span><span class="p">])</span>
558+
<span class="o">-&gt;</span><span class="na">search</span><span class="p">(</span><span class="s1">&#39;two cities&#39;</span><span class="p">);</span>
559+
</pre></div>
560+
561+
<p>Use multiple separate tagFilter calls to create an intersection of documents.</p>
562+
<div class="codehilite"><pre><span></span><span class="nv">$result</span> <span class="o">=</span> <span class="nv">$bookIndex</span>
563+
<span class="o">-&gt;</span><span class="na">tagFilter</span><span class="p">(</span><span class="s1">&#39;color&#39;</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;blue&#39;</span><span class="p">])</span>
564+
<span class="o">-&gt;</span><span class="na">tagFilter</span><span class="p">(</span><span class="s1">&#39;color&#39;</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;red&#39;</span><span class="p">])</span>
565+
<span class="o">-&gt;</span><span class="na">search</span><span class="p">(</span><span class="s1">&#39;two cities&#39;</span><span class="p">);</span>
566+
</pre></div>
567+
539568
<h2 id="filtering-numeric-fields">Filtering Numeric Fields<a class="headerlink" href="#filtering-numeric-fields" title="Permanent link">&para;</a></h2>
540-
<p>Numeric fields can be filtered with the index's filter method.</p>
569+
<p>Numeric fields can be filtered with the index's numericFilter method.</p>
541570
<div class="codehilite"><pre><span></span><span class="nv">$result</span> <span class="o">=</span> <span class="nv">$bookIndex</span>
542-
<span class="o">-&gt;</span><span class="na">filter</span><span class="p">(</span><span class="s1">&#39;price&#39;</span><span class="p">,</span> <span class="mf">4.99</span><span class="p">,</span> <span class="mf">19.99</span><span class="p">)</span>
571+
<span class="o">-&gt;</span><span class="na">numericFilter</span><span class="p">(</span><span class="s1">&#39;price&#39;</span><span class="p">,</span> <span class="mf">4.99</span><span class="p">,</span> <span class="mf">19.99</span><span class="p">)</span>
543572
<span class="o">-&gt;</span><span class="na">search</span><span class="p">(</span><span class="s1">&#39;two cities&#39;</span><span class="p">);</span>
544573
</pre></div>
545574

546575
<h2 id="filtering-geo-fields">Filtering Geo Fields<a class="headerlink" href="#filtering-geo-fields" title="Permanent link">&para;</a></h2>
547-
<p>Numeric fields can be filtered with the index's filter method.</p>
576+
<p>Numeric fields can be filtered with the index's geoFilter method.</p>
548577
<div class="codehilite"><pre><span></span><span class="nv">$result</span> <span class="o">=</span> <span class="nv">$bookIndex</span>
549578
<span class="o">-&gt;</span><span class="na">geoFilter</span><span class="p">(</span><span class="s1">&#39;place&#39;</span><span class="p">,</span> <span class="o">-</span><span class="mf">77.0366</span><span class="p">,</span> <span class="mf">38.897</span><span class="p">,</span> <span class="mi">100</span><span class="p">)</span>
550579
<span class="o">-&gt;</span><span class="na">search</span><span class="p">(</span><span class="s1">&#39;two cities&#39;</span><span class="p">);</span>

docs/sitemap.xml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,37 @@
22
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
33
<url>
44
<loc>None</loc>
5-
<lastmod>2019-02-18</lastmod>
5+
<lastmod>2019-05-25</lastmod>
66
<changefreq>daily</changefreq>
77
</url>
88
<url>
99
<loc>None</loc>
10-
<lastmod>2019-02-18</lastmod>
10+
<lastmod>2019-05-25</lastmod>
1111
<changefreq>daily</changefreq>
1212
</url>
1313
<url>
1414
<loc>None</loc>
15-
<lastmod>2019-02-18</lastmod>
15+
<lastmod>2019-05-25</lastmod>
1616
<changefreq>daily</changefreq>
1717
</url>
1818
<url>
1919
<loc>None</loc>
20-
<lastmod>2019-02-18</lastmod>
20+
<lastmod>2019-05-25</lastmod>
2121
<changefreq>daily</changefreq>
2222
</url>
2323
<url>
2424
<loc>None</loc>
25-
<lastmod>2019-02-18</lastmod>
25+
<lastmod>2019-05-25</lastmod>
2626
<changefreq>daily</changefreq>
2727
</url>
2828
<url>
2929
<loc>None</loc>
30-
<lastmod>2019-02-18</lastmod>
30+
<lastmod>2019-05-25</lastmod>
3131
<changefreq>daily</changefreq>
3232
</url>
3333
<url>
3434
<loc>None</loc>
35-
<lastmod>2019-02-18</lastmod>
35+
<lastmod>2019-05-25</lastmod>
3636
<changefreq>daily</changefreq>
3737
</url>
3838
</urlset>

docs/sitemap.xml.gz

2 Bytes
Binary file not shown.

src/Aggregate/Reducers/Aliasable.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
trait Aliasable
66
{
77
public $alias;
8-
}
8+
}

src/Fields/FieldFactory.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ class FieldFactory
88
{
99
public static function make($name, $value)
1010
{
11+
if ($value instanceof Tag) {
12+
return new TagField($name, $value);
13+
}
1114
if (is_string($value)) {
1215
return new TextField($name, $value);
1316
}

src/Fields/GeoLocation.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
class GeoLocation
66
{
7-
protected $name;
87
protected $longitude;
98
protected $latitude;
109

0 commit comments

Comments
 (0)