Ответы пользователя по тегу Sphinx
  • Почему manticore (sphinx) не создаёт локальный индекс?

    ManticoreSearch
    @ManticoreSearch
    path = C:/Manticore/var/data/myindex1/

    Уберите слэш в конце или добавьте после него что-то, иначе у вас получается имя файла индекса пустое.

    возможно ли как-то не останавливая службу почистить какой-то командой query.log


    echo "" > query.log

    или

    mv query.log query.log.1 и flush logs в searchd или отправить сигнал USR1

    обязательно ли вести лог всех запросов?


    нет
    Ответ написан
    1 комментарий
  • Как manticore search работает с опечатками в запросах?

    ManticoreSearch
    @ManticoreSearch
    Вот так работает:

    mysql> drop table if exists suggest; create table suggest(explanation text) min_infix_len='1' dict='keywords'; insert into suggest values(0,'Автобус'); call suggest('овтобус', 'suggest', 1 as limit);
    Query OK, 0 rows affected (0.05 sec)
    
    Query OK, 0 rows affected, 1 warning (0.01 sec)
    
    Query OK, 1 row affected (0.02 sec)
    
    +----------------+----------+------+
    | suggest        | distance | docs |
    +----------------+----------+------+
    | автобус        | 1        | 1    |
    +----------------+----------+------+
    1 row in set (0.00 sec)


    Попробуйте использовать не php-клиент, а mysql. Про баг в php-клиенте вы уже issue завели https://github.com/manticoresoftware/manticoresear...

    Как будет время - пофиксим. Pull request'ы приветствуются!
    Ответ написан
    Комментировать
  • Почему не работает запрос?

    ManticoreSearch
    @ManticoreSearch
    SELECT *, WEIGHT() AS weight FROM companyIndex WHERE MATCH (Компания | *Компания*) OPTION ranker=proximity_bm25, max_query_time=3, max_matches=300


    Не хватает одинарных кавычек вокруг Компания | *Компания*
    Ответ написан
    Комментировать
  • Почему 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'`
    Ответ написан
    5 комментариев
  • Как правильно поддерживать арабский язык в manticore?

    ManticoreSearch
    @ManticoreSearch
    Может поломать. Если качество поиска по арабским текстам чрезвычайно важно, то лучше оставить, как в сфинксе.
    Ответ написан
  • Как работает BM25 ранкер в sphinx?

    ManticoreSearch
    @ManticoreSearch
    1. Значение веса найденного документа умножается на 1000 и округляется (0.319*, например, становится 319)
    2. `ranker = BM25` учитывает и вес полей на самом деле. По умолчанию у каждого поля он 1, но тоже умножается на 1000.
    3. Оба числа суммируются, получается: 1000*1 + 0.319*1000 = 1319
    Ответ написан
  • Redis vs Elasticsearch vs Sphinx для хранения данных и поиск по ним?

    ManticoreSearch
    @ManticoreSearch
    DISCLAIMER: сотрудник Manticore
    ---------------------------------------------
    Посмотрите на Manticore Search (форк Sphinx).

    1. Хранение данных каталога с быстрым доступом

    Да, хранение есть по дефолту:
    ➜  ~ docker run --name manticore --rm -d manticoresearch/manticore && \
    docker exec -it manticore mysql && \
    docker stop manticore
    
    992d3e61b7949f82c16b472f4947c81fee58f2a720aa5bbba4fe478383583661
    MySQL [(none)]> create table f(name text, color string);
    MySQL [(none)]> insert into f(name,color) values('Something good', 'red');
    MySQL [(none)]> select highlight() from f where match('good');
    +-----------------------+
    | highlight()           |
    +-----------------------+
    | Something <b>good</b> |
    +-----------------------+
    MySQL [(none)]>


    2. Поиске по информации, в особенности русскими названиями-запросами

    Всё, как в Sphinx, только charset_table не нужно писать. Дефолта обычно достаточно для всех языков.

    3. Простота в использовании: синтаксис запросов, документация

    Дока тут https://docs.manticoresearch.com/
    Интерактивные курсы здесь https://play.manticoresearch.com/
    В частности про синтаксис запросов https://play.manticoresearch.com/fulltextintro/

    4. Наименьшая нагрузка на "железо"

    Чуть лучше, чем в Sphinx https://manticoresearch.com/2019/05/14/benchmark_m...

    5. Отказоустойчивость

    Есть репликация https://play.manticoresearch.com/replication/

    6. Безопасность

    Есть поддержка https для JSON-протокола https://play.manticoresearch.com/https/

    7. Масштабирование

    Как в Sphinx
    Ответ написан
    Комментировать
  • Как использовать оператор OR в sphinx?

    ManticoreSearch
    @ManticoreSearch
    Попробуйте
    $sphinx->search('(Test 1) | (TEST 2)')
    Ответ написан
    1 комментарий
  • Как организовать пагинацию, если БД и поисковая машина - это раздельные сервисы?

    ManticoreSearch
    @ManticoreSearch
    У всех Документов есть особенность - каждому из них соответствует текстовое содержимое, по содержимому которого и необходимо одновременно с поиском по параметрам выполнять фильтрацию

    А в Sphinx / Manticore какой функциональности не хватает, чтобы фильтровать сразу сразу и по полнотексту, и по всему остальному? Можно пример?

    - заносить все параметры для фильтрации в индекс поисковой машины - ужасный вариант, так как поисковая машина выполняет фильтрацию по обычным своим полям очень медленно

    Можно пример запроса по "поисковая машина выполняет фильтрацию по обычным своим полям очень медленно". Не пойму что вы имеете в виду под "обычными своими полями" и почему вдруг получается медленно.
    Как по мне - этот вариант наиболее оптимальный в вашем случае. Фильтровать по полнотексту в одном месте и неполнотексту в другом и при этом оперировать сотнями тысяч документов возможно, но не всегда может получиться добиться хорошей производительности, т.к. всё будет упираться в то, что отфильтрованное в одном месте нужно будет передать в другое. А в случае, если делать всё в одном месте это происходит автматически.

    плюс встает необходимость содержать актуальными две копии данных - в БД и поисковой машине

    Так а сейчас вы разве это уже не делаете? Просто нужно дополнительно с id/full-text field синхронизировать и другие поля, по которым хочется в итоге фильтровать. Если вы имеете в виду, что сложно синхронизировать обновления документов, то для plain индексов есть main+delta для таких случаев (https://play.manticoresearch.com/maindelta/) , для RT - зависит от приложения.
    Ответ написан
    Комментировать
  • Как закрыть sphinx от внешнего доступа?

    ManticoreSearch
    @ManticoreSearch
    По умолчанию Sphinx слушает на всех ip. Про это даже есть зарепорченная уязвимость - https://www.cvedetails.com/cve/CVE-2019-14511/ (в Manticore Search она устранена)

    Достаточно просто в конфиге указать нужный ip, на котором он может принимать соединения:
    listen=127.0.0.1:9306

    Ну или переезжайте на Manticore Search - там по дефолту localhost + куча других плюшек.
    Ответ написан
    Комментировать
  • Centos 7 поMогите найти rpm для sphinx 3.1.1?

    ManticoreSearch
    @ManticoreSearch
    Или переходите на нормально поддерживаемый форк: там и rpm, и репозиторий https://manticoresearch.com/downloads/, и ежемесячные релизы и перформанс лучше и крэшей меньше.
    Ответ написан
  • Почему могут не работать 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)
    Ответ написан
    1 комментарий
  • 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 - пользователь и группа, которые нужно установить для файла.
    Ответ написан
    1 комментарий
  • Sphinx: как задать вес определенным словам?

    ManticoreSearch
    @ManticoreSearch
    Можно:
    1) самое простое - поэкспериментировать с добавлением "как" и "сделать" в список стоп-слов, чтоб они не индексировались вовсе.
    2) посложнее - поэкспериментировать с собственной формулой ранжирования:
    - https://docs.manticoresearch.com/latest/html/searc... - список факторов
    - PACKEDFACTORS() поможет увидеть влияние каждого фактора на каждый результат поиска и подкорректировать формулу
    Ответ написан
    Комментировать
  • Как посчитать общее количество записей в Sphinx с групировкой?

    ManticoreSearch
    @ManticoreSearch
    SELECT COUNT(DISTINCT group_id) FROM table
    Ответ написан
    Комментировать
  • SphinxQL на php?

    ManticoreSearch
    @ManticoreSearch
    mysqli при указании ему "localhost" в качестве хоста игнорирует указанный порт и пытается подключиться через unix socket. Использование "127.0.0.1" вместо "localhost" решает эту проблему.
    Ответ написан
  • Как сохранить состояние дельта-индекса sphinx?

    ManticoreSearch
    @ManticoreSearch
    Делайте индексацию через xmlpipe, tsvpipe или csvpipe, которые работают так, что можно указать команду, которая и вернет все данные, которые должны быть проиндексированы. Эта же команда может и сохранить состояние куда нужно, а не только туда, откуда она читает данные.
    Ответ написан
    Комментировать
  • Sphinx: почему находит лишнее?

    ManticoreSearch
    @ManticoreSearch
    Скорее всего в конфиге для min_word_len указано значение > 1
    Ответ написан
    Комментировать
  • 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)
    Ответ написан
    Комментировать