Гигабазаданных МКАДб (не путать с МКАД)— это проект, написанный на языке Rust, представляющий собой высокоскоростной сервер, предназначенный для поиска заметок по ключевым словам с поразительной быстротой. Его цель — обеспечить невероятно быстрый и эффективный поиск в огромных объемах данных. Проект разрабатывается, как средство для нахождения связей между заметками в плагине intellivault. Автором сей прекрасной бд является intbyte.

Вот документация к данному проекту:


1. Связывание ключевых слов с файлом

  • Метод: POST
  • URL: /add_keywords
  • Формат: application/json
  • Тело запроса:
{
	"name": "example.txt",
	"keywords": ["keyword1", "keyword2", "keyword3"]
}
  • Описание: Этот эндпоинт связывает файл с заданными ключевыми словами. После выполнения запроса файл будет ассоциирован с ключевыми словами в базе данных, что позволит легко искать файлы по этим ключевым словам в будущем.
  • Параметры:
    • name: Имя файла, с которым нужно связать ключевые слова.
    • keywords: Массив ключевых слов, которые будут ассоциированы с файлом.
  • Ответ: Не возвращает данных (HTTP 204 - No Content).

2. Получение ключевых слов по имени файла

  • Метод: GET
  • URL: /get_keywords/<name>
  • Описание: Этот эндпоинт возвращает список ключевых слов, ассоциированных с файлом по имени.
  • Параметры:
    • name: Имя файла, для которого нужно получить ключевые слова.
  • Ответ:
["keyword1", "keyword2", "keyword3"]
  • Примечание: Если файл не найден, возвращается ошибка (HTTP 404 - Not Found).

3. Удаление файла

  • Метод: POST
  • URL: /remove_file/<name>
  • Описание: Этот эндпоинт удаляет файл и все связанные с ним ключевые слова из базы данных.
  • Параметры:
    • name: Имя файла, который нужно удалить.
  • Ответ: Не возвращает данных (HTTP 204 - No Content).

4. Получение файлов по ключевым словам

  • Метод: GET
  • URL: /get_files_by_keywords
  • Описание: Этот эндпоинт позволяет получить список файлов, соответствующих заданным ключевым словам. Файлы сортируются в зависимости от количества совпавших ключевых слов.
  • Параметры:
    • keywords: Массив строк с ключевыми словами для поиска.
    • rules: Правила для поиска.
      • take_first: Количество файлов, которые нужно вернуть (целое число).
      • sorting_type: Тип сортировки:
        • Downgrade: Сортировка файлов по убыванию количества совпавших ключевых слов.
        • Upgrade: Сортировка файлов по возрастанию количества совпавших ключевых слов.
        • Random: Сортировка файлов случайным образом.
      • minimum_threshold: Минимальное количество совпавших ключевых слов, начиная с которого файл будет включен в выборку.
  • Ответ:
["file1.txt", "file2.txt", "file3.txt"]
  • Примечание: Если не найдены файлы, соответствующие запросу, возвращается пустой массив.

5. Сохранение резюме в файл

  • Метод: POST
  • URL: /save_summary
  • Описание: Этот эндпоинт сохраняет резюме в файл с заданным именем.
  • Параметры:
    • name: Имя файла, в который будет сохранено резюме.
    • text: Текст резюме, который нужно сохранить.
  • Ответ: Не возвращает данных (HTTP 204 - No Content).

6. Получение резюме из файла

  • Метод: GET
  • URL: /get_summary
  • Описание: Этот эндпоинт позволяет получить текст резюме из файла по имени.
  • Параметры:
    • name: Имя файла, из которого нужно получить резюме.
  • Ответ:
"Текст резюме"
  • Примечание: Если файл не найден, возвращается ошибка (HTTP 404 - Not Found).

Структуры данных:

SortingType

  • Описание: Тип сортировки для поиска файлов по ключевым словам.
  • Значения:
    • Downgrade: Сортировка файлов по убыванию количества совпавших ключевых слов.
    • Upgrade: Сортировка файлов по возрастанию количества совпавших ключевых слов.
    • Random: Сортировка файлов случайным образом.

KeywordsMatcher

  • Описание: Структура для передачи информации о ключевых словах и правилах поиска.
  • Поля:
    • keywords: Массив строк, представляющих ключевые слова для поиска.
    • rules: Правила для поиска, включающие параметры сортировки и минимальные пороги.

MatcherRules

  • Описание: Правила для поиска файлов по ключевым словам.
  • Поля:
    • take_first: Количество файлов, которые нужно вернуть.
    • sorting_type: Тип сортировки (см. SortingType).
    • minimum_threshold: Минимальное количество совпавших ключевых слов, начиная с которого файл попадет в выборку.

FileKeywords

  • Описание: Структура, описывающая файл и его ассоциированные ключевые слова.
  • Поля:
    • name: Имя файла.
    • keywords: Массив ключевых слов, ассоциированных с файлом.

ГИГА ПРИМЕР

import fetch from 'node-fetch';
 
// Функция для связывания ключевых слов с файлом
async function addKeywords(name: string, keywords: string[]): Promise<void> {
  try {
    const response = await fetch('http://localhost:3000/add_keywords', {
      method: 'POST', // Метод POST для отправки данных
      headers: {
        'Content-Type': 'application/json', // Указываем, что отправляем данные в формате JSON
      },
      body: JSON.stringify({
        name: name,
        keywords: keywords, // Включаем имя файла и ключевые слова
      }),
    });
 
    // Проверяем, успешен ли запрос
    if (response.status === 204) {
      console.log('Ключевые слова успешно связаны с файлом');
    } else {
      console.log('Ошибка при связывании ключевых слов с файлом');
    }
  } catch (error) {
    console.error('Произошла ошибка при выполнении запроса:', error);
  }
}
 
// Функция для получения ключевых слов по имени файла
async function getKeywords(name: string): Promise<void> {
  try {
    const response = await fetch(`http://localhost:3000/get_keywords/${name}`, {
      method: 'GET', // Метод GET для получения данных
    });
 
    // Если файл найден, выводим ключевые слова
    if (response.ok) {
      const keywords = await response.json();
      console.log(`Ключевые слова для файла ${name}:`, keywords);
    } else {
      console.log('Файл не найден');
    }
  } catch (error) {
    console.error('Произошла ошибка при выполнении запроса:', error);
  }
}
 
// Функция для удаления файла
async function removeFile(name: string): Promise<void> {
  try {
    const response = await fetch(`http://localhost:3000/remove_file/${name}`, {
      method: 'POST', // Метод POST для удаления файла
    });
 
    // Проверяем, успешен ли запрос
    if (response.status === 204) {
      console.log('Файл успешно удален');
    } else {
      console.log('Ошибка при удалении файла');
    }
  } catch (error) {
    console.error('Произошла ошибка при выполнении запроса:', error);
  }
}
 
// Функция для получения файлов по ключевым словам
async function getFilesByKeywords(keywords: string[], takeFirst: number, sortingType: string, minimumThreshold: number): Promise<void> {
  try {
    const response = await fetch('http://localhost:3000/get_files_by_keywords', {
      method: 'GET', // Метод GET для получения списка файлов
      headers: {
        'Content-Type': 'application/json',
      },
      // Преобразуем параметры в строку запроса (query string)
      body: JSON.stringify({
        keywords: keywords,
        rules: {
          take_first: takeFirst, // Количество файлов для возврата
          sorting_type: sortingType, // Тип сортировки
          minimum_threshold: minimumThreshold, // Минимум совпавших ключевых слов для файла
        },
      }),
    });
 
    // Если файлы найдены, выводим их
    if (response.ok) {
      const files = await response.json();
      console.log('Файлы по ключевым словам:', files);
    } else {
      console.log('Файлы не найдены');
    }
  } catch (error) {
    console.error('Произошла ошибка при выполнении запроса:', error);
  }
}
 
// Пример вызова всех функций
 
// Добавляем ключевые слова для файла
addKeywords('example.txt', ['keyword1', 'keyword2', 'keyword3']);
 
// Получаем ключевые слова для файла
getKeywords('example.txt');
 
// Удаляем файл
removeFile('example.txt');
 
// Получаем файлы по ключевым словам
getFilesByKeywords(['keyword1', 'keyword2'], 5, 'Downgrade', 2);