{"id":19301313,"url":"https://github.com/gleor/cpp-search-server","last_synced_at":"2025-02-24T01:30:29.872Z","repository":{"id":219483547,"uuid":"610860421","full_name":"Gleor/cpp-search-server","owner":"Gleor","description":"Поисковый сервер. Поиск документов по ключевым словам.","archived":false,"fork":false,"pushed_at":"2024-01-24T14:00:43.000Z","size":87,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-05T23:11:46.330Z","etag":null,"topics":["cpp","oop","search-engine","tf-idf"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Gleor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-07T16:17:22.000Z","updated_at":"2024-01-27T18:02:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"b31dfed1-4d0e-4f9c-a02c-9066d8fe2e15","html_url":"https://github.com/Gleor/cpp-search-server","commit_stats":null,"previous_names":["gleor/cpp-search-server"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gleor%2Fcpp-search-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gleor%2Fcpp-search-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gleor%2Fcpp-search-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gleor%2Fcpp-search-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Gleor","download_url":"https://codeload.github.com/Gleor/cpp-search-server/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240403017,"owners_count":19795830,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","oop","search-engine","tf-idf"],"created_at":"2024-11-09T23:17:30.336Z","updated_at":"2025-02-24T01:30:29.718Z","avatar_url":"https://github.com/Gleor.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# **Search Server**\n\n## **Описание**\n\nДанный проект представляет собой упрощённую реализацию поискового сервера, которая позволяет хранить документы, стоп-слова, а также осуществлять поиск по ключевым словам с возможностью ранжирования найденных документов по статистической метрике TF-IDF.\n\nДополнительные возможности:\n* учёт минус-слов при поиске (исключение содержищих их документов из результата)\n* использование многопоточности\n* создание и обработка очереди запросов\n* постраничный вывод результатов поиска\n\n## **Работа с проектом**\n\n### **Класс SearchServer**\n\nСоздание экземпляра класса осуществляется с помощью конструктора, в который передаётся набор стоп-слов в виде строки. Также есть возможность передать вместо строки произвольный контейнер, который должен поддерживать range-based for цикл\n\nПример:\n\n```cpp\nSearchServer search_server(\"and with in\"s)\n```\n### **Добавление документов**\n\nМетод AddDocuments позволяет пользователю добавить документ: для этого в качестве параметров ему нужно передать id документа, его содержимое (в виде строки), статус и рейтинг (в виде вектора)\n\nПример:\n\n```cpp\nsearch_server.AddDocument(10, \"white cat and yellow hat\"s, DocumentStatus::ACTUAL, { 1, 2 })\n```\n### **Поиск по документам**\n\nПоиск по документам реализован через метод FindTopDocuments, результатом работы которого является вектор найденных документов. Фильтрация и ранжирование документов может быть выполнено по-разному, в зависимости от переданных методу аргументов:\n\n* строка - по ней высчитывается релевантность документов по метрике TF-IDF\n* статус - ACTUAL, IRRELEVANT, BANNED, REMOVED\n* тип выполнения - последовательный, параллельный\n* предикат, в котором указаны параметры филтрации\n\nПример:\n\n```cpp\nsearch_server.FindTopDocuments(execution::par, \"curly nasty cat\"s, [](int document_id, DocumentStatus status, int rating) { return document_id % 2 == 0; })\n```\n### **Обработка очереди запросов**\n\nС помощью методов ProcessQueries и ProcessQueriesJoined можно параллельно обрабатывать несколько запросов. Первый из них возвращает вектор результатов поиска (вектор векторов), второй возвращает список (плоское представление)\n\nПример:\n\n```cpp\nconst vector\u003cstring\u003e queries = {\n    \"nasty rat -not\"s,\n    \"not very funny nasty pet\"s,\n    \"curly hair\"s\n};\nfor (const Document\u0026 document : ProcessQueriesJoined(search_server, queries)) {\n    cout \u003c\u003c \"Document \"s \u003c\u003c document.id \u003c\u003c \" matched with relevance \"s \u003c\u003c document.relevance \u003c\u003c endl;\n}\n```\n\n### **Постраничный вывод**\n\nКласс Paginator реализует поддержку постраничного вывода документов. Для взаимодействия с ним используется шаблонный метод Paginate, в который передаётся вектор найденных документов и желаемый размер страницы вывода.\n\nПример:\n\n```cpp\nconst auto search_results = search_server.FindTopDocuments(\"curly dog\"s);\nconst int page_size = 2;\nconst auto pages = Paginate(search_results, page_size);\nfor (auto page = pages.begin(); page != pages.end(); ++page) {\n    cout \u003c\u003c *page \u003c\u003c endl;\n    cout \u003c\u003c \"Page break\"s \u003c\u003c endl;\n}\n```\n\n## **Системные требования**\n\nКомпилятор С++ с поддержкой стандарта C++17 или новее\n\n## **Сборка**\n\nСборка осуществляется с помощью IDE (поддержка C++17) или командной строки\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgleor%2Fcpp-search-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgleor%2Fcpp-search-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgleor%2Fcpp-search-server/lists"}