1. Go to this page and download the library: Download front/redisearch library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
$index = new Index( $client ); // Initiate Index
$index->setIndexName('test'); // Set indexName
$index->on('HASH');
$index->setPrefix('doc:');
$index->setTemporary(3600); // The index will automatically be deleted after one hour. The underlying HASH values remain untouched.
$index->setStopWords( 0 ); // This will disables excluding of stop-words
// Or you can add your list of stop-words
$stop_words = array('this', 'that', 'it', 'what', 'is', 'are');
$index->setStopWords( $stop_words );
$index->setNoOffsetsEnabled( true ); // If set, term offsets won't be stored for documents (saves memory, does not allow exact searches or highlighting).
$index->setNoFieldsEnabled( true ); // If set, field bits for each term won't be stored. This saves memory, does not allow filtering by specific fields.
$index->setDefaultLang( 'english' ); // Set default language of the index.
$index->setLangField( 'language' ); // Set document field used to specify individual documents language.
$index->setScore(1); // Set a default score for that specific index.
$index->setScoreField('scoreField'); // Set a field which specifies each individual documents score.
$index->setPayloadField('payloadField'); // Document field that should be used as a binary safe payload string
$index->setMaxFields(34); // Maximum allowed number of fields. This is to preserve memory use
$index->setNoHighlight(); // This will deactivate highlighting feature.
$index->setNoFreqs(); // Prevents storing term frequencies.
$index->skipInitialScan(); // Cancels initial HASH scanning when index created.
$document = new Document();
$document->setScore(0.3); // The document's rank based on the user's ranking. This must be between 0.0 and 1.0. Default value is 1.0
$document->setLanguage('english'); // This is usefull for stemming
$document->setId('doc:123'); // This is the HASH key. RediSearch uses the prefix of document ID to index the document
// And the fields
$document->setFields(
array(
'title' => 'Document title like post title',
'category' => 'search, fuzzy, synonym, phonetic',
'date' => strtotime( '2019-01-14 01:12:00' ),
'location' => new GeoLocation(-77.0366, 38.8977),
)
);
$index->add( $document ); // Finally, add document to the index (in other term, index the document)
$search = new Query( $client, 'indexName' );
$results = $search
->sortBy( $fieldName, $order = 'ASC' )
->geoFilter( $fieldName, $longitude, $latitude, $radius, $distanceUnit = 'km' )
->numericFilter( $fieldName, $min, $max = null )
->withScores() // If set, we also return the relative internal score of each document. this can be used to merge results from multiple instances
->withSortKey() // Returns the value of the sorting key
->verbatim() // if set, we do not try to use stemming for query expansion but search the query terms verbatim.
->withPayloads() // If set, we retrieve optional document payloads (see FT.ADD). the payloads follow the document id, and if WITHSCORES was set, follow the scores
->noStopWords() // If set, we do not filter stopwords from the query
->slop() // If set, we allow a maximum of N intervening number of unmatched offsets between phrase terms. (i.e the slop for exact phrases is 0)
->inKeys( $number, $keys ) // If set, we limit the result to a given set of keys specified in the list. the first argument must be the length of the list, and greater than zero. Non-existent keys are ignored - unless all the keys are non-existent.
->inFields( $number, $fields ) // If set, filter the results to ones appearing only in specific fields of the document, like title or URL. num is the number of specified field arguments
->limit( $offset, $pageSize = 10 ) // If set, we limit the results to the offset and number of results given. The default is 0 10
->highlight( $fields, $openTag = '<strong>', $closeTag = '</strong>')
->summarize( $fields = array(), $fragmentCount = 3, $fragmentLength = 50, $separator = '...') // Use this option to return only the sections of the field which contain the matched text
->return( $fields ) // Use this keyword to limit which fields from the document are returned. num is the number of fields following the keyword. If num is 0, it acts like NOCONTENT.
->noContent() // If it appears after the query, we only return the document ids and not the content. This is useful if RediSearch is only an index on an external document collection
->search( $query, $documentsAsArray = false ); // By default, return values will be object, but if TRUE is passed as `$documentsAsArray` results will return as array