Skip to content

Latest commit

 

History

History
179 lines (151 loc) · 3.63 KB

README.MD

File metadata and controls

179 lines (151 loc) · 3.63 KB

Stretchy

Build Status

Stretchy in an Elasticsearch integration for Laravel.

Heavily Inspired by Query Builder and Schema of laravel.

Description on going.

Version

0.0.1 (Alpha)

Documentation

The current documentation is at stretchy.readthedocs.org.

#Installation

###Requirements

  • PHP 5.4+

Installing with Composer

  1. In your composer.json, add the dependency: "tamayo/stretchy": "dev-master"

  2. Add the Stretchy service provider in your app.config:

        'Tamayo\Stretchy\StretchyServiceProvider'
  1. Add the following aliases:
		'Index'    => 'Tamayo\Stretchy\Facades\Index',
		'Document' => 'Tamayo\Stretchy\Facades\Document',
		'Stretchy' => 'Tamayo\Stretchy\Facades\Stretchy'
  1. (Optional) If you want to override the default configuration:
php artisan config:publish tamayo/stretchy

Located in your laravel config directory: packages/tamayo/stretchy/config.php

##Quick Examples ####Create Index To create a basic index just do the following:

Index::create('foo');

If you want to specify shards and replicas:

Index::create('foo', function($index)
	{
		$index->shards(5);
		$index->replicas(1);
	});

####Delete Index

Index::delete('foo');

####Document indexing

Document::index('foo')
    ->type('tweet')
    ->id(13) // Optional (if not specified elastic will generate an unique id)
    ->insert([
        'username' => '@ericktamayo',
        'tweet'    => 'Hello world!'
    ]);

####Update a document

Document::index('foo')
    ->type('tweet')
    ->id(13)
    ->update(['tweet' => 'Hello world!!!']);

####Get a document

Document::index('foo')->type('tweet')->Id(13)->get();

####Delete a document

Document::index('foo')->type('tweet')->Id(13)->delete();

###Searching

#####Match Query

Stretchy::search('foo')->match('bar', 'Stretchy')->get();

To provide additional parameters:

Stretchy::search('foo')
	->match('bar', 'baz', ['operator' => 'and', 'zero_terms_query' => 'all'])
	->get();

or

Stretchy::search('foo')
	->match('bar', 'Stretchy', function($match)
	{
		$match->operator('and');
		$match->zeroTermsQuery('all');
		$match->cutoffFrequency(0.001);
	})
	->get();

#####Term Query

Stretchy::search('foo')->term('bar', 'baz')->get();

To provide additional parameters:

Stretchy::search('foo')->term('bar', 'baz', ['boost' => 2])->get();

or

Stretchy::search('foo')
	->term('bar', 'baz', function($term)
	{
		$term->boost(2);
	})
	->get();

#####Bool Query

Stretchy::search('foo')
	->bool(function($query)
	{
		$query->must(function($must)
		{
			$must->match('bar', 'baz');
		});

		$query->mustNot(function($mustNot)
		{
			$mustNot->match('bar', 'qux');
		});

		$query->should(function($should)
		{
			$should->match('bar', 'bah');
		});

		$query->minimumShouldMatch(1);
	})
	->get();

More examples can be found in the documentation.

Roadmap

  • Documentation
  • Index API I(Basic)
  • Elastic Query Builder (Search API)
  • Leverage Models
    • Model traits
  • PutMapping Wrapper
  • Leverage Laravel Migrations
    • Migrations with PutMaping
  • Advanced models and relations
    • Search and rebuild model from results and it's relationships
  • Index API II (Advanced)

###Author Erick Tamayo - ericktamayo@gmail.com - @ericktamayo

License

MIT