High performance full-text search engine with SQL and JSON support Drop-in replacement for Sphinx Search. Guaranteed to stay open source. Highly scalable.

More on https://manticoresearch.com
Контакты

Наибольший вклад в теги

Все теги (7)

Лучшие ответы пользователя

Все ответы (17)
  • Почему могут не работать wordforms Sphinx на RealTime индексах?

    ManticoreSearch
    @ManticoreSearch
    Скорее всего вы сперва создали RT индекс, а затем уже прописали wordforms. В этом случае вы должны сейчас видеть такое:
    mysql> show index rt settings;
    +---------------+-----------------------+
    | Variable_name | Value                 |
    +---------------+-----------------------+
    | settings      | charset_type = utf-8
     |
    +---------------+-----------------------+
    1 row in set (0.00 sec)


    Если так и есть, то вот это должно помочь:
    alter table rt reconfigure

    После этого статус должен быть таким:
    mysql> show index rt settings;
    +---------------+--------------------------------------------+
    | Variable_name | Value                                      |
    +---------------+--------------------------------------------+
    | settings      | charset_type = utf-8
    wordforms = syns.txt
     |
    +---------------+--------------------------------------------+
    1 row in set (0.00 sec)
    Ответ написан
  • Почему Sphinx показывает ошибку "unknown local index'?

    ManticoreSearch
    @ManticoreSearch
    sql_field создает как поле, так и индекс


    `sql_field_string` определяет тип колонки как и полнотекстовое поле (field) и строковый атрибут (string). Само по себе определение типа поля не создаёт индекс. Директива `source`, в которой прописывается `sql_field_string` тоже не создаёт индекс. Простой индекс создаётся через директиву `index`, в которой определяется один или несколько `source`'ов, из которых будет строиться индекс. Затем индекс индексируется с помощью утилиты `indexer`.

    $sphinx->Query('добро', 'message');


    message в данном случае - это имя индекса, а не поля. Отсюда и ошибка - `unknown local index 'message'`
    Ответ написан
  • Sphinx: Как увеличить вес результата со словами идущими подряд?

    ManticoreSearch
    @ManticoreSearch
    Здравствуйте. Должно все работать и по дефолту:
    mysql> select *, weight() from idx_min where match('Как подключить доме*');
    +------+--------------------------------------------------------------------------+----------+
    | id   | body                                                                     | weight() |
    +------+--------------------------------------------------------------------------+----------+
    |    1 | как подключить домен к сайту                                             |     3319 |
    |    2 | как подключить почту для домена                                          |     2319 |
    |    3 | Как подключить SSL-сертификат для домена                                 |     2319 |
    +------+--------------------------------------------------------------------------+----------+
    3 rows in set (0.01 sec)


    но в принципе то, что вы ищете называется LCS (Longest Common Subsequence) и используя ranker expr можно вручную регулировать влияние этого фактора. Например так:

    mysql> select *, weight() from idx_min where match('Как подключить доме* подключить') option ranker=expr('sum(lcs)');
    +------+--------------------------------------------------------------------------+----------+
    | id   | body                                                                     | weight() |
    +------+--------------------------------------------------------------------------+----------+
    |    1 | как подключить домен к сайту                                             |        3 |
    |    2 | как подключить почту для домена                                          |        2 |
    |    3 | Как подключить SSL-сертификат для домена                                 |        2 |
    +------+--------------------------------------------------------------------------+----------+
    3 rows in set (0.00 sec)


    Если изменить запрос, то у всех вес будет единица, т.к. этот вычисленное значение по единственному фактору lcs у всех равно единице:
    mysql> select *, weight() from idx_min where match('Как доме* подключить') option ranker=expr('sum(lcs)');
    +------+--------------------------------------------------------------------------+----------+
    | id   | body                                                                     | weight() |
    +------+--------------------------------------------------------------------------+----------+
    |    1 | как подключить домен к сайту                                             |        1 |
    |    2 | как подключить почту для домена                                          |        1 |
    |    3 | Как подключить SSL-сертификат для домена                                 |        1 |
    +------+--------------------------------------------------------------------------+----------+
    3 rows in set (0.01 sec)
    Ответ написан
  • Как работает BM25 ранкер в sphinx?

    ManticoreSearch
    @ManticoreSearch
    1. Значение веса найденного документа умножается на 1000 и округляется (0.319*, например, становится 319)
    2. `ranker = BM25` учитывает и вес полей на самом деле. По умолчанию у каждого поля он 1, но тоже умножается на 1000.
    3. Оба числа суммируются, получается: 1000*1 + 0.319*1000 = 1319
    Ответ написан
  • FATAL: failed to open log file '/var/log/sphinxsearch/searchd.log': Permission denied, как исправить?

    ManticoreSearch
    @ManticoreSearch
    Права на searchd.log нужно установить такие, чтобы пользователь, под которым работает процесс searchd мог писать в searchd.log. Соответственно чтобы точно ответить на этот вопрос нужно знать под каким пользователем он работает.
    Пользователя сфинкс создавать не обязательно, но для секьюрности желательно.
    Чтоб хоть как-то запуститься можно сделать chmod 777 /var/log/sphinxsearch/searchd.log и аналогично для любых других файлов, на которые он будет ругаться. Затем после запуска можно сделать ps aux|grep searchd, посмотреть пользователя под которым он работает и уже поставить корректные права через chown user:user /path/to/some/file , где user:user - пользователь и группа, которые нужно установить для файла.
    Ответ написан