Индекс произвольно очищается

я пришел в Monticore от Sphinx, только считай осваиваюсь.
У меня примерно 200 индексов, все они имеют номер ‘lib_{номер}’.
Так вот индекс lib_25 имеет 52 784 записей и переодически несколько раз в сутки сбрасывается в 0 (есть еще пару индексов которые сбрасываются но этот индекс чаще всех).
Так же есть индекс lib_133 в котором 2 438 672 записей и с ним все порядке, он стабилен!
Monticore лежит на отдельном сервере в Докере запустил я его через параметры:
“sudo docker run --name manticore --rm -v /var/lib/manticore:/var/lib/manticore -v /var/log/manticore:/var/log/manticore -p 127.0.0.1:9306:9306 -p 127.0.0.1:9308:9308 -d manticoresearch/manticore”. работаю с ним через 9308 порт запросами POST (с портом 3006 пока работать не получается)
Manticore создается пустым, все индексы создаю через запросы и заполняю их тоже запросами POST
во время работы проекта идет поиск и изменения в индексах (они конечно RT индексы)

Так вот почему-то в логах пишутся только логи на поиск но не на запись или удаление, я пытался отлавливать все удаление отправляемые от сервера в Monticore и там нет ничего неприличного. Сам повторить или отловить почему может очистится индекс не могу.
Я на самом деле в растерянности, единственная связь с спонтанной очисткой это то что индексы достаточно часто изменяются.

Может ли быть такое что Montocore не хватает что ни будь внутри Докера (место или ОЗУ)? (хотя сам сервак очень сильный, 24 физических ядра и 128 гиг оперативки, monticore не единственный докер но сервер легко все тянет)
Может это известный глюк о котором я не знаю?
Можно ли как то положить все запросы в логи, что бы по ним отследить если эта проблема на моей стороне?

Помогите пожалуйста где и как стоит копать (я пока пытаюсь написать еще пару скриптов на отслеживания всего что отправляется в Monticore но даже сейчас уверен что сервис не причем, так как весь механизм много лет работал без сбоев в Sphinx)

отлично, я нашел причина почему очищается индекс:
я отправляю POST запрос на /json/delete
параметры:
{
“index” : “lib_25”,
“master_id” : 1234,
}

и все индекс полностью очищен!

Причем если выполнить команду в консоле DELETE FROM lib_25 WHERE master_id = 1234;
все отрабатывает корректно.

Также если отправить параметр: { “id” : 1234 } то POST запрос тоже отрабатывает правильно.

в чем может быть причина такого поведения?

может быть баг в http обработчике - можете создать тикет на github куда выложить воспроизводимый пример ?

код я пишу на php, запрос делаю через “curl”
'Content-Type: ’ : ‘application/json’

даже не представляю как сделать рабочую версию на github :slight_smile: но я попробую повторить тот же баг на C#

ну на всякий случай хочу уточнить что на тестовом сервере я использую https а на продавшее http (просто на прод версию я еще не выложил сертификат), но поведение Monticore одинаковое

вам нужно приложит конфиг демона с индексом или create запрос, несколько insert запросов которые наполнят индекс и json/delete запрос который очистит весь индекс, вместо удаления конкретного документа

образ был скачен командой:
“docker pull manticoresearch/manticore”

запущен:
“sudo docker run --name manticore --rm -v /var/lib/manticore:/var/lib/manticore -v /var/log/manticore:/var/log/manticore -p 127.0.0.1:9306:9306 -p 127.0.0.1:9308:9308 -d manticoresearch/manticore”

Никаких других действий я не производил.

Создан индекс: на “/sql”
“mode=raw&query=CREATE TABLE IF NOT EXISTS lib_25 ( lib integer, master_id integer, level integer, lang string, field string, name text, weight integer, popularity integer) charset_table=‘0…9, A…Z->a…z, a…z, +, U+21E8, U+410…U+42F->U+430…U+44F, U+430…U+44F, U+401->U+435, U+451->U+0435’ dict=‘keywords’ morphology=‘stem_enru’ min_word_len=‘1’ min_infix_len=‘2’ index_exact_words=‘1’ html_strip=‘1’”

Заполняю:
и Удаляю: на “/json/delete”
{
“index” : “lib_25”,
“master_id” : 1234,
}

Я дико извиняюсь за свою неопытность в таких вопросах, но я не совсем знаю как правильно перехватить POST запрос что бы его тут отобразить. Я покопаюсь в вопросы и постараюсь выложить более подробную информацию

сейчас попробовал сделать запрос: на “/json/delete”
{
“index” : “lib_25”,
“query” : [
“master_id” => 1234
],
}

все тоже самое, индекс полностью очищается

В HTTP всё не так просто. Правильный запрос:

{
  "index": "lib_25",
  "query": {
    "equals": {"master_id": 1234}
  }
}' 

Пример:

➜  curl -sX POST http://localhost:9308/delete  -d '
{
  "index": "lib_25",
  "query": {
    "equals": {"master_id": 1234}
  }
}'
{"_index":"lib_25","deleted":1}%                                                                                                                                            ➜  mysql -P9306 -h0 -e "SELECT * FROM lib_25"
+---------------------+------+-----------+-------+--------+------------+------+-------+------+
| id                  | lib  | master_id | level | weight | popularity | lang | field | name |
+---------------------+------+-----------+-------+--------+------------+------+-------+------+
| 1514212650895016018 |    0 |      2345 |     0 |      0 |          0 |      |       |      |
+---------------------+------+-----------+-------+--------+------------+------+-------+------+

А

curl -sX POST http://localhost:9308/delete  -d '
{
  "index": "lib_25",
   "master_id": 1234
}'

эквивалентно

curl -sX POST http://localhost:9308/delete  -d '
{
  "index": "lib_25",
  "unknown_field": 1234
}'

или

curl -sX POST http://localhost:9308/delete  -d '
{
  "index": "lib_25"
}'

Вот и удаляется всё из индекса.

спасибо за ответ, поправлю запрос, где бы эту информацию бы в документации найти )))
но честно сказать все равно очищение индекса из за ошибки в запросе это конечно сильно, может стоит забросить такое поведение?

Да, это у нас в планах.