Блог

Сергей Сенаторов

Name: Sergey Senatorov

FullStack developer

Что выбрать sphinx или elasticsearch

Некоторые не знают что выбрать sphinx или elasticsearch, есть даже разные сравнения, но на мой взгляд такое сравнение делать неправильно, эти продукты решают задачи на принципиально разных уровнях.

Основное отличие заключается в том, что sphinx – это поисковый движок, а elasticsearch – это уже сервис поверх поискового движка, эдакая надстройка над apache lucene. Сравнение lucene и sphinx было бы проводить намного правильней, но в этой заметке такого сравнения не будет.

С точки зрения разработчика вы можете выбрать как одно, так и другое. Sphinx легковесный быстрый движок, имеет свой sql подобный язык, которым удобно пользоваться в консольном режиме.

Подключиться и просмотреть индекс по словоформе можно примерно таким образом:

mysql -h 127.0.0.1 -P 9306
select id from index where match('школ'); show meta;
select where id => 234234

Elasticsearch имеет много разных плагинов и возможности для интеграции, а также предоставляет удобное RESTful api, через которое можно делать все необходимые операции (индексировать, конфигурировать, обновлять, удалять, получать).

Конейнер с elasticesearch можно поднять в docker-compose, например вот так:

elasticsearch:
  image: elasticsearch:6.5.4
  #command: elasticsearch -Des.network.host=0.0.0.0
  ports:
    - "9200:9200"
    - "9300:9300"

Создать индекс:

  http://localhost:9200/test
  PUT
  
{
  "mappings": {
    "_doc": {
      "properties": {
        "age": { "type": "integer" },
        "name": { "type": "text" }
      }
    }
  }
}

Вставить запись:

  http://localhost:9200/test/_doc/1
  POST
  
{
"name": "Андрей",
"age" : 45
}

Получить запись:

  http://localhost:9200/test/_search
  POST
  
{
  "query" : {
    "bool" : {
      "must": [
      	
      	{
          "match": {
              "name": "Андрей"
          }
      } 
      	
      
      ]
    }
  }
}
Ну и так далее.
Дополнительными преимуществами elasticsearch является большое комьюнити и активное развитие самого движка. В примерах описаны варианты запросов напрямую к api elastic, но вы также можете использовать библиотеки на необходимом вам языке, например официальный низкоуровневый клиент на php https://github.com/elastic/elasticsearch-php