Sphinx Search library provides SphinxQL indexing and searching features

Related tags

Search sphinxsearch
Overview

Sphinx Search

Latest Stable Version Build Status Coveralls branch Total Downloads

Sphinx Search library provides SphinxQL indexing and searching features.

Introduction

This Library aims to provide:

  • A SphinxQL query builder based upon Zend\Db\Sql
  • A simple Search class
  • An Indexer class to work with RT indices
  • Factories for SphinxQL connection through Zend\Db\Adapter

We have also prepared a set of related useful tools. You can use them in conjuction with this library.

Note

This library does not use SphinxClient PHP extension because everything available through the Sphinx API is also available via SphinxQL but not vice versa (i.e., writing to RT indicies is only available via SphinxQL).

Installation

Using composer:

Add the following to your composer.json file:

"require": {
	"ripaclub/sphinxsearch": "~0.8.0",
}
Note

Since version 0.8.1, PHP 7 and Zend Framework's components of 3.x series are fully supported.

Starting from 0.8.x series the minimum requirements are PHP >= 5.5 and Zend Framework dependencies >= 2.4.

When forced to use a PHP version less (or equal) than 5.4 and/or a Zend Framework dependencies less (or equal) then 2.3 you can use 0.7.1 version.

Configuration (simple)

In order to work with library components you need an adapter instance. You can simply obtain configured adapter by using the built-in factory like the following example:

use Zend\ServiceManager\ServiceManager;
use Zend\ServiceManager\Config;

$serviceManagerConfig = new Config([
    'factories' => [
        'SphinxSearch\Db\Adapter\Adapter' => 'SphinxSearch\Db\Adapter\AdapterServiceFactory'
    ],
    'aliases' => [
        'sphinxql' => 'SphinxSearch\Db\Adapter\Adapter'
    ]
]);
$serviceManager = new ServiceManager();
$serviceManagerConfig->configureServiceManager($serviceManager);
$serviceManager->setService('Config', [
    'sphinxql' => [
        'driver'    => 'pdo_mysql',
        'hostname'  => '127.0.0.1',
        'port'      => 9306,
        'charset'   => 'UTF8'
    ]
]);

$adapter = $serviceManager->get('sphinxql');
Note

Only two drivers are supported:

  • pdo_mysql
  • mysqli

For more details see the Adapter Service Factory section.

Usage

Search

Assuming $adapter has been retrivied via ServiceManager:

use SphinxSearch\Search;
use SphinxSearch\Db\Sql\Predicate\Match;

$search = new Search($adapter);
$rowset = $search->search('foo', new Match('?', 'ipsum dolor'));

echo 'Founds row:' . PHP_EOL;
foreach ($rowset as $row) {
	echo $row['id'] . PHP_EOL;
}

The search() method takes as first argument the index name (or an array of indicies) and the second one accepts a where condition (same as Zend\Db\Sql\Select::where()). Furthermore search() second argument can accept a closure, which in turn, will be passed the current Select object that is being used to build the SELECT query.

The following usage is possible:

use SphinxSearch\Search;
use SphinxSearch\Db\Sql\Select;
use SphinxSearch\Db\Sql\Predicate\Match;

$search = new Search($adapter);
$rowset = $search->search('foo', function(Select $select) {
	$select->where(new Match('?', 'ipsum dolor'))
	       ->where(['c1 > ?' => 5])
               ->limit(1);
});

The SphinxSearch\Db\Sql\Select class (like Zend\Db\Sql\Select which we extend from) supports the following methods related to SQL standard clauses:

$select->from($table)
$select->columns(array $columns)
$select->where($predicate, $combination = Predicate\PredicateSet::OP_AND)
$select->group($group)
$select->having($predicate, $combination = Predicate\PredicateSet::OP_AND)
$select->order($order)
$select->limit($limit)
$select->offset($offset)
// And also variable overloading for:
$select->where
$select->having

Thus it adds some SphinxQL specific methods:

$select->withinGroupOrder($withinGroupOrder)
$select->option(array $values, $flag = self::OPTIONS_MERGE)

Other utility methods like setSpecifications, getRawState and reset are fully supported.

Instead quantifier, join and combine are just ignored because SphinxQL syntax doesn't have them.

Indexer

Assuming $adapter has been retrivied via ServiceManager we can perform indexing of documents, provided that the indices on which we act are real time.

use SphinxSearch\Indexer;

$indexer = new Indexer($adapter);
$indexer->insert(
	'foo',
	[
		'id' => 1,
		'short' => 'Lorem ipsum dolor sit amet',
		'text' => 'Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit ...'
	],
	true
);

Note that third parameter of insert method is a boolean flag indicating wheter a "upsert" rather than an insert have to be done.

Furthermore, an Indexer instance allows to update and delete rows from real time indices (using the methods update and delete, respectively).

Advanced

Adapter Service Factory

This library come with two factories in bundle in order to properly configure the Zend\Db\Adapter\Adapter to work with Sphinx Search.

Use SphinxSearch\Db\Adapter\AdapterServiceFactory (see Configuration section above) for a single connection else if you need to use multiple connections use the shipped SphinxSearch\Db\Adapter\AdapterAbstractServiceFactory registering it in the ServiceManager as below:

'service_manager' => [
	'abstract_factories' => [
  		'SphinxSearch\Db\Adapter\AdapterAbstractServiceFactory'
	],
]

For the abstract factory configuration refer to Zend Db Adpater Abstract Factory documentation.

Prepared statement

SphinxQL does not support prepared statement, but PDO drivers are able to emulate prepared statement client side. To achive prepared query benefits this library fully supports this feature.

Note

The PDO driver supports prepared and non-prepared queries. The Mysqli driver does not support prepared queries.

For both SphinxSearch\Search and SphinxSearch\Indexer you can choose the working mode via setQueryMode() using one of the following flags:

const QUERY_MODE_PREPARED   = 'prepared'; // use prepared statement
const QUERY_MODE_EXECUTE    = 'execute';  // do not use prepared statement
const QUERY_MODE_AUTO       = 'auto';     // auto detect best available option (prepared mode preferred)

With the auto option the component will use the best execution mode available, prefering prepared mode if supported by the driver.

Working with types

This library aims to normalize API usage among supported drivers and modes, but due to SphinxQL limitations there are some considerations:

  • NULL

    Not supported by SphinxQL. The library transparently handle it for SQL compatibility: an exception will be thrown by the driver if you try to use a value = NULL.

  • boolean

    SphinxQL does not have a native boolean type but if you try to use a PHP bool the library and the driver will cast the value to 0 or 1 respectively.

  • integer

    PHP native integers work properly when SphinxQL expects an uint. Note that strings containing integers do not work in filters (i.e. WHERE clause).
    WARNING: PHP integers are signed, instead SphinxQL supports only UNSIGNED integers and UNIX timestamp.

  • float

    Due to SphinxQL specific issues related to float values (especially in WHERE clause), by default them are converted to a 32-bit-single-precision compatible string rappresentation which are then included into the SQL query as literals, even in the case where prepared statements are used.

    This feature works only if value is a native PHP float (anyway strings containing floats do not work within Sphinx). If it is needed, this behaviour can be globally disabled using $adapter->getPlatform()->enableFloatConversion(false).

    WARNING: disabling float conversion feature can produce unexpected behaviors, some notable examples:

    • Actually Sphinx SQL interpreter treats a number without decimal part as an integer. So, assumming f1 as float column, if you try WHERE f1 = 10 you will get 42000 - 1064 - index foo: unsupported filter type 'intvalues' on float column else if you try WHERE f1 = 10.0 it will work fine.
    • Due to the fact that SphinxQL does not support float quoted as strings and PDO driver has no way to bind a double (SQL float) parameter in prepared statement mode, PDO driver will just cast to string producing a locale aware conversion (same as PHP echo), so it will work only if LC_NUMERIC setting is compliant with point as separator in decimal notation (for example you can use LC_NUMERIC='C')

For those reasons we suggest to always use proper PHP native types (i.e., not use strings for numeric fields) when building queries.

Useful link: Sphinx Attributes Docs.

SQL Objects

As Zend\Db\Sql this library provides a set of SQL objects:

  • SphinxSearch\Db\Sql\Select explained in Search paragraph
  • SphinxSearch\Db\Sql\Insert
  • SphinxSearch\Db\Sql\Replace same as insert, but overwrites duplicate IDs
  • SphinxSearch\Db\Sql\Update with the ability to handle OPTION clause
  • SphinxSearch\Db\Sql\Delete
  • SphinxSearch\Db\Sql\Show

Each of them can be retrivied by SphinxSearch\Db\Sql\Sql class methods:

use SphinxSearch\Db\Sql\Sql;

$sql = new Sql($adapter);
$select = $sql->select();  	// @return SphinxSearch\Db\Sql\Select
$insert = $sql->insert();   // @return SphinxSearch\Db\Sql\Insert
$insert = $sql->replace();	// @return SphinxSearch\Db\Sql\Replace
$update = $sql->update(); 	// @return SphinxSearch\Db\Sql\Update
$delete = $sql->delete();  	// @return SphinxSearch\Db\Sql\Delete
$show   = $sql->show(); 	// @return SphinxSearch\Db\Sql\Show

Or can be instanziated directly like in the following example:

use SphinxSearch\Db\Sql\Update;
use SphinxSearch\Db\Sql\Predicate\Match;

$update = new Update;
$update->from('myindex')
       ->set(['bigattr' => 1000, 'fattr' => 3465.23])
       ->where(new Match('?', 'hehe'))
       ->where(['enabled' => 1])
       ->option('strict', 1);

Then you can perform your query by:

$statement = $sql->prepareStatementForSqlObject($select);
$results = $statement->execute();

Or using the Search or the Indexer components:

$resultset = $indexer->updateWith($update);

Thus, every object (that has where()) supports the Match expression, as explained in next paragrah.

Query expression

The SphinxSearch\Query\QueryExpression class provides a placeholder expression way and a string excape mechanism in order to use safely the Sphinx query syntax. Also, the component design permits to use it standalone, since it has no dependencies on other library's components.

Some examples:

use SphinxSearch\Query\QueryExpression;

$query = new QueryExpression('@title ? @body ?', ['hello', 'world']);
echo $query->toString(); //outputs: @title hello @body world


echo $query->setExpression('"?"/3')
           ->setParameters(['the world is a wonderful place, but sometimes people uses spe(ia| ch@rs'])
           ->toString(); //outputs: "the world is a wonderful place, but sometimes people uses spe\(ia\| ch\@rs"/3

echo $query->setExpression('? NEAR/? ? NEAR/? "?"')
           ->setParameters(['hello', 3, 'world', 4, '"my test"'])
           ->toString(); //outputs: hello NEAR/3 world NEAR/4 "my test"

The SphinxSearch\Db\Sql\Predicate\Match class uses internally the QueryExpression, so you can use it in your SQL queries directly:

use SphinxSearch\Adapter\Platform\SphinxQL;
use SphinxSearch\Db\Sql\Select;
use SphinxSearch\Db\Sql\Predicate\Match;

$select = new Select;
$select->from('myindex')
       ->where(new Match('? NEAR/? ? NEAR/? "?"', ['hello', 3, 'world', 4, '"my test"']))
       ->where(['enabled' => 1]);

//outputs: SELECT * from `foo` WHERE MATCH('hello NEAR/3 world NEAR/4 "my test"') AND `enabled` = 1
echo $select->getSqlString(new SphinxQL());

Testing

The library source code (on master) is 100% covered by unit tests.

Once installed development dependencies through composer you can run phpunit.

./vendor/bin/phpunit --exclude-group=integration

To run also our integration tests execute:

./vendor/bin/phpunit
Note

To execute integration tests you need a running instance of SphinxSearch (e.g., using a correctly configured docker image).


Analytics

Comments
  • [WIP] Upgraded dependencies

    [WIP] Upgraded dependencies

    While working on a project that is using zend-*thing ~ 2.7 I wasn't able to use this anymore. In this branch I'm working on checking if zendframework dependencies can be updated safely without breaking changes and if the whole project is compatibile with PHP 7.

    Note: This is a work in progress. I needed the PR to run tests on travis.

    opened by fntlnz 7
  • Management of float values

    Management of float values

        $where['geodist <= ?'] = (float) $distance;
    

    It works With float like 203.620805, but it doesn't with a float like 40.0000.

    PHP Version: 5.5.3 (pdo in bundle) Sphinx version: 2.0.9-release (rel20-r4115)

    bug 
    opened by leogr 7
  • BC introduced by ZF 2.4

    BC introduced by ZF 2.4

    Some method signatures have been changed in ZF 2.4.

    The library must be fixed.

    Side question: does it make sense to introduce a polyfill to maintain legacy compatibility with old ZF series (i.e. < 2.4.0)?

    bug 
    opened by leogr 6
  • Integration test

    Integration test

    • [x] test both supported drivers
    • [x] index documents through Indexer class
    • [x] search documents through Search class
    • [x] test documentation query example
    • [x] test common use cases

    The goal is to test real use case SphinxQL queries, completely covering all library code.

    enhancement 
    opened by leodido 5
  • Select calculated field

    Select calculated field

    I'm trying to run this example http://sphinxsearch.com/blog/2013/07/02/geo-distances-with-sphinx/ I can execute a query when I connect to sphinx through CLI mysql

    mysql> SELECT *,  CONTAINS(GEOPOLY2D(40.95164274496, -76.88583678218, 41.188446201688, -73.203723511772, 39.900666261352, -74.171833538046, 40.059260979044, -76.301076056469), latitude_deg, longitude_deg) AS inside FROM geodemo WHERE inside=1 LIMIT 0,100 ;
    

    But can't to execute it through SphinxSearch.

    This simple example produce exception

    $adapter = $this->getServiceLocator()->get('SphinxSearch\Db\Adapter\Adapter');
    $search = new \SphinxSearch\Search($adapter);
            $results = $search->search('realty', function(Select $select){
                $select
                    ->columns(array(
                        '*', 
                        '1' => 'test'
                    ))
                    ->offset(0)
                    ->limit(25);
            })->toArray();
    
    Exception:
    Statement could not be executed (42000 - 1064 - index realty: parse error: Sphinx expr: syntax error, unexpected TOK_IDENT near 'test') 
    

    If i remove '1' => 'test' or add test field to sphinx index all works fine.

    question 
    opened by broh 4
  • SQL syntax on Match predicate

    SQL syntax on Match predicate

    Hello,

    When using the Match predicate I am receiving an SQL syntax error. Statement could not be executed (42000 - 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''keyword') AND online = 1 LIMIT 0,20' at line 1)

    Example code:

    $rowset = $search->search('users', function(Select $select) {
    $select ->columns(array('name'))
            ->where(new Match('?', 'keyword'))
            ->where(array('online = ?' => 1))
            ->limit(20);
    });
    

    When running the same code without the 'Match' predicate, codes runs correct and returns a set with results from te database.

    opened by freshcoat 2
  • What is the difference between Ranking, Sorting, Matching Modes and Filtering in Sphinxsearch?

    What is the difference between Ranking, Sorting, Matching Modes and Filtering in Sphinxsearch?

    I want to know what is the difference between ranking, sorting, matching modes and filtering in Sphinx and how can I do more than one thing at a time.

    In documentation also, it is written you can do ranking and sorting simultaneously. How is it possible because if I rank then results will be arranged in some order and if I do sorting the results will be arranged in some different order.

    If possible please explain using some example. I am using version 2.1.9.

    Please don't refer me to Sphinx documentation. I have already read it.

    Every answer is appreciated.

    Thanks in advance.

    question 
    opened by ankitgoyal91 2
  • SHOW after search commands

    SHOW after search commands

    Add support for SHOW commands.

    Syntax

    SHOW META [ LIKE pattern ]
    
    SHOW WARNINGS [ LIKE pattern ]
    
    SHOW STATUS [ LIKE pattern ]
    

    Notes The commands listed only make sense if used after a search query.

    References

    enhancement 
    opened by leodido 2
  • Fix SHOW STATUS statement for SphinxSearch >= 2.2.2

    Fix SHOW STATUS statement for SphinxSearch >= 2.2.2

    There were 2 failures:

    1) SphinxSearchTest\IntegrationTest\MysqliIntegrationTest::testShowStatus
    Failed asserting that 31 matches expected 30.
    
    /.../sphinxsearch/tests/SphinxSearchTest/Integration/AbstractIntegrationTest.php:665
    /.../sphinxsearch/vendor/phpunit/phpunit/phpunit:56
    
    2) SphinxSearchTest\IntegrationTest\PDOIntegrationTest::testShowStatus
    Failed asserting that 31 matches expected 30.
    
    /.../sphinxsearch/tests/SphinxSearchTest/Integration/AbstractIntegrationTest.php:665
    /.../sphinxsearch/vendor/phpunit/phpunit/phpunit:56
    
    bug 
    opened by leodido 1
  • Update class broken

    Update class broken

    Tests are broken because of an Zend\Stdlib\PriorityList object used into Zend\Db\Sql\Update class (extended by our Update class).

    Please investigate if it is our fault o ZF2 sub-component dependencies fault.

    bug question 
    opened by leodido 1
  • OPTION clause on UPDATE statements

    OPTION clause on UPDATE statements

    Syntax is the same as SELECT clause.

    UPDATE statement allows this options:

    • ignore_nonexistent_columns

      added in version 2.1.1-beta, points that the update will silently ignore any warnings about trying to update a column which is not exists in current index schema.

    • strict

      this option is used while updating JSON attributes; as of 2.2.1-beta, it's possible to update just some types in JSON. And if you try to update, for example, array type you'll get error with strict option on and warning otherwise.

    Reference here.

    question 
    opened by leodido 1
  • Fatal error: Call to undefined method

    Fatal error: Call to undefined method

    I have just downloaded this module and I installed it. But I can work with it because of this fatal error in the screenshot. I actually use Zend 2.4.9. What have I missed please?

    Here is my code use SphinxSearch\Search; use SphinxSearch\Db\Sql\Predicate\Match;

    $search = new Search($adapter); $rowset = $search->search('foo', new Match('?', 'ipsum dolor'));

    echo 'Founds row:' . PHP_EOL; foreach ($rowset as $row) { echo $row['id'] . PHP_EOL; }

    op

    bug 
    opened by Doopin 15
  • New container based test environment

    New container based test environment

    Create a testing environment based on docker containers.

    Goals:

    • Simplify CI setup
    • Test against different SphinxSearch versions
    • Add new SphinxSearch configurations
    • Test against different SphinxSearch configurations
    • Work both online and on CI services
    opened by leodido 0
  • FACET statement

    FACET statement

    Introduced in 2.2+ versions of Sphinx Search. To execute faceted searches, previously, multi-queries was used. Now FACET statement has been introduced.

    References:

    feature 
    opened by leodido 0
  • Add support for GROUP [N] BY syntax

    Add support for GROUP [N] BY syntax

    Actually there's a typo in doc, so we missing the [N] param in GROUP BY: http://sphinxsearch.com/bugs/view.php?id=1854

    The [N] do this: Starting with 2.2.1-beta, you can query Sphinx to return (no more than) N top matches for each group accordingly to WITHIN GROUP ORDER BY.

    enhancement 
    opened by leogr 0
Releases(0.8.1)
  • 0.8.1(Mar 26, 2016)

    • Dependencies update:
      • Added support php 7
      • Fixed support for zend-db and zend-servicemanager versions ^2.4 || ^3.0
      • Introduced container-interop
    • Improved CI
    • Updated documentation
    Source code(tar.gz)
    Source code(zip)
  • 0.8.0(Jun 22, 2015)

    • Dependencies upgrade:
      • PHP >= 5.5
      • Zend\Db >= 2.4
      • Zend\Stdlib >= 2.4
      • Zend\ServiceManager >= 2.4
    • Legacy code removed
    • Code coverage and documentation improved
    Source code(tar.gz)
    Source code(zip)
  • 0.7.1(Apr 11, 2015)

    • Compatibility with ZF from 2.2.x up to 2.4.x
    • PSR4
    NOTES

    This is the last release supporting PHP 5.3 and ZF2 2.1. From release 0.8.0 sphinxsearch library will depend on PHP >= 5.5 and ZF >= 2.4.

    Source code(tar.gz)
    Source code(zip)
  • 0.7.0(Sep 30, 2014)

  • 0.6.2(Sep 29, 2014)

    • ZF2 related dependencies fixed to their 2.2.* versions because of changes in Zend\Db\Sql\Update class (starting from ZF2 2.3)
    • PSR2 compliance also for test classes
    Source code(tar.gz)
    Source code(zip)
Owner
Ripa Club
Ripa Club
Fulltext indexing and searching for Laravel

Laravel fulltext index and search This package creates a MySQL fulltext index for models and enables you to search through those. Install Install with

SWIS 171 Jan 4, 2023
Unmaintained: Laravel Searchy makes user driven searching easy with fuzzy search, basic string matching and more to come!

!! UNMAINTAINED !! This package is no longer maintained Please see Issue #117 Here are some links to alternatives that you may be able to use (I do no

Tom Lingham 533 Nov 25, 2022
Laravel package to search through multiple Eloquent models. Supports sorting, pagination, scoped queries, eager load relationships and searching through single or multiple columns.

Laravel Cross Eloquent Search This Laravel package allows you to search through multiple Eloquent models. It supports sorting, pagination, scoped quer

Protone Media 844 Dec 25, 2022
Laravel Scout provides a driver based solution to searching your Eloquent models.

Introduction Laravel Scout provides a simple, driver-based solution for adding full-text search to your Eloquent models. Once Scout is installed and c

The Laravel Framework 1.3k Dec 31, 2022
This package offers advanced functionality for searching and filtering data in Elasticsearch.

Scout Elasticsearch Driver ?? Introducing a new Elasticsearch ecosystem for Laravel. ?? This package offers advanced functionality for searching and f

Ivan Babenko 1.2k Dec 20, 2022
Laravel search is package you can use it to make search query easy.

Laravel Search Installation First, install the package through Composer. composer require theamasoud/laravel-search or add this in your project's comp

Abdulrahman Masoud 6 Nov 2, 2022
Think-scout - A driver based solution to searching your models. Inspired By Laravel Scout

前言 whereof/think-scout根据thinkphp设计思想参考laravel/scout进行扩展 whereof/think-scout 为模型的全文搜索提供了一个简单的、基于驱动程序的解决方案。 目前,Scout 自带了一个 Elasticsearch 驱动;而编写自定义驱动程序很简

wangzhiqiang 6 Mar 18, 2022
This modules provides a Search API Backend for Elasticsearch.

Search API ElasticSearch This modules provides a Search API Backend for Elasticsearch. This module uses the official Elasticsearch PHP Client. Feature

null 1 Jan 20, 2022
Build and execute an Elasticsearch search query using a fluent PHP API

PACKAGE IN DEVELOPMENT, DO NOT USE YET Build and execute ElasticSearch queries using a fluent PHP API This package is a lightweight query builder for

Spatie 94 Dec 14, 2022
Search among multiple models with ElasticSearch and Laravel Scout

For PHP8 support use php8 branch For Laravel Framework < 6.0.0 use 3.x branch The package provides the perfect starting point to integrate ElasticSear

Sergey Shlyakhov 592 Dec 25, 2022
This is an open source demo of smart search feature implemented with Laravel and Selectize plugin

Laravel smart search implementation See demo at: http://demos.maxoffsky.com/shop-search/ Tutorial at: http://maxoffsky.com/code-blog/laravel-shop-tuto

Maksim Surguy 215 Sep 8, 2022
A metadata catalog and search engine for geospatialized data

resto is a metadata catalog and a search engine dedicated to geospatialized data. Originally, it’s main purpose it to handle Earth Observation satellite imagery but it can be used to store any kind of metadata localized in time and space.

Jerome Gasperi 50 Nov 17, 2022
A fully featured full text search engine written in PHP

TNTSearch TNTSearch is a full-text search (FTS) engine written entirely in PHP. A simple configuration allows you to add an amazing search experience

TNT Studio 2.9k Jan 8, 2023
A search package for Laravel 5.

Search Package for Laravel 5 This package provides a unified API across a variety of different full text search services. It currently supports driver

Mark Manos 354 Nov 16, 2022
A php trait to search laravel models

Searchable, a search trait for Laravel Searchable is a trait for Laravel 4.2+ and Laravel 5.0 that adds a simple search function to Eloquent Models. S

Nicolás López Jullian 2k Dec 27, 2022
Driver for Laravel Scout search package based on https://github.com/teamtnt/tntsearch

TNTSearch Driver for Laravel Scout - Laravel 5.3 - 8.0 This package makes it easy to add full text search support to your models with Laravel 5.3 to 8

TNT Studio 1k Dec 27, 2022
Kirby docs search workflow for Alfred

Kirby Docs search workflow for Alfred 4 An ultra-fast Kirby Docs search workflow for Alfred 4 Installation Download the latest version Install the wor

Adam Kiss 30 Dec 29, 2022
A TYPO3 extension that integrates the Apache Solr search server with TYPO3 CMS. dkd Internet Service GmbH is developing the extension. Community contributions are welcome. See CONTRIBUTING.md for details.

Apache Solr for TYPO3 CMS A TYPO3 extension that integrates the Apache Solr enterprise search server with TYPO3 CMS. The extension has initially been

Apache Solr for TYPO3 126 Dec 7, 2022
A site search engine

THIS PACKAGE IS IN DEVELOPMENT, DO NOT USE IN PRODUCTION YET A site search engine This package can crawl your entire site and index it. Support us We

Spatie 219 Nov 8, 2022