1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Tencent-wwsearch

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 24.11.2024 04:52 55a22fc

WWSearch: введение

WWSearch — это полнотекстовый поисковый индекс, разработанный для корпоративного WeChat. Он предназначен для быстрого поиска по большому объёму данных и использует гибкую систему хранения на основе LSM-дерева. В настоящее время WWSearch охватывает все сценарии поиска в корпоративном WeChat, включая поиск по корпоративным телефонным книгам, системам одобрения, ежедневным и еженедельным отчётам, отчётам о работе, поиску корпоративных материалов и поиску по корпоративной электронной почте. Система обрабатывает более 300 миллиардов записей, имеет миллиарды ключевых слов и поддерживает ёмкость в несколько десятков терабайт, обеспечивая возможность поиска в реальном времени.

Функции:

  1. Модификация данных в реальном времени: данные записываются и сразу становятся доступными для поиска. Для внешних пользователей предоставляются интерфейсы для вставки, обновления, удаления и замены данных, что позволяет адаптироваться к различным сценариям обновления данных.
  2. Гибкий запрос: поддерживается равенство, префиксный и приблизительный поиск. Несколько запросов могут быть объединены с помощью операторов AND и OR для удовлетворения различных потребностей поиска. Запросы также могут быть ограничены определёнными полями.
  3. Постфильтрация: результаты поиска могут быть дополнительно отфильтрованы после индексации. Поддерживаются такие функции, как равенство, числовые диапазоны, поиск элементов массива и приблизительное соответствие строк. Это полезно для фильтрации полей, которые не могут быть эффективно проиндексированы, или для специфических бизнес-сценариев.
  4. Гибкая сортировка: можно сортировать результаты поиска по нескольким атрибутам полей, аналогично синтаксису ORDER BY.
  5. Расширяемость функций поиска: при необходимости можно расширить возможности поиска, добавив различные агрегатные функции (например, sum, avg) или поддерживая оценку текста для конкретных сценариев.

Анализ реализации:

  • Анализ реализации полнотекстового поискового индекса WWSearch.

Интерфейсы:

Основные интерфейсы включают:

  • AddDocuments: добавляет документ, если его идентификатор не существует.
  • UpdateDocuments: обновляет документ, если его идентификатор существует. При обновлении сохраняются старые значения полей, которые не были изменены.
  • AddOrUpdateDocuments: добавляет или обновляет документ в зависимости от того, существует ли его идентификатор.
  • ReplaceDocuments: заменяет существующий документ.
  • DeleteDocuments: удаляет существующий документ.
  • AddDocumentsWithoutRead: добавляет или заменяет документ без проверки его существования.

В качестве примера использования рассмотрим интерфейс AddOrUpdateDocuments.

// wwsearch/index_writer.h
bool AddOrUpdateDocuments(const TableID &table,
                          std::vector<DocumentUpdater *> &documents,
                          std::string *store_buffer = nullptr,
                          SearchTracer *tracer = nullptr);

// wwsearch/document.h
class DocumentUpdater {
    ...
  Document new_document_;
    ...
};

class Document {
    ... 
  std::vector<IndexField *> fields_;
  DocumentID document_id_;
    ...
};

// wwsearch/index_field.h
class IndexField {
    ...
  FieldID field_id_;
  IndexFieldFlag field_flag_;
  kIndexFieldType field_type_;
  uint64_t numeric_value_;
  std::string string_value_;
    ...
}

Для пользователей важны следующие поля:

  • TableID: состоит из бизнес-типа (uint8_t) и набора разделов (uint64_t), используется для разделения таблиц.
  • DocumentID: уникальный идентификатор документа (uint64_t).
  • IndexField: информация о полях документа, включая атрибуты и значения. Включает field_id_, field_flag_, field_type_, numeric_value_ и string_value_.

Запросы: Основной интерфейс запроса:

// wwsearch/searcher.h
SearchStatus DoQuery(const TableID &table, Query &query, size_t top,
                     std::vector<Filter *> *filter,
                     std::vector<SortCondition *> *sorter,
                     std::list<DocumentID> &docs,
                     uint32_t min_match_filter_num = 0)

Для пользователей важно следующее:

  • TableID: используется для идентификации таблицы.
  • Query: информация, используемая для построения запроса, может поддерживать вложенные запросы AndQuery и OrQuery, а также префиксные запросы PrefixQuery.
  • Filter: фильтры, используемые для ограничения результатов поиска. Могут включать числовые, строковые, массивы и многострочные условия.
  • SortCondition: используется для сортировки результатов поиска по определённым полям. В настоящее время поддерживает только сортировку по числовым полям.
  • min_match_filter_num: устанавливает минимальное количество фильтров, которое должно совпадать для вывода документа.

Построение:

Зависимости:

Зависимости включают:

# wwsearch/deps/
protobuf-2.4.1
snappy-1.0.4
rocksdb-v5.16.6
tokenizer-mmseg

Репозиторий уже содержит предварительно скомпилированные библиотеки зависимостей. Вы можете перекомпилировать их в соответствии со своей средой сборки.

Построение:

Требуется среда сборки, поддерживающая C++11.

mkdir build
cd build
cmake  ..
make -j32
cp ../deps/tokenizer/etc/wwsearch_* .

После успешной сборки вы увидите:

  1. wwsearch_ut: модульные тесты.
  2. wwsearch_example: простой пример, включающий индексацию и запросы.

Теперь вы можете наслаждаться использованием системы!

Вклад кода: Перед отправкой pull request с кодом вклада ознакомьтесь с Contributing.md. WWSearch разработан на C++11 и следует руководству по стилю Google C++. Перед отправкой кода необходимо использовать прилагаемый файл .clang-format для форматирования кода.

Обратная связь: Если у вас есть вопросы или проблемы, вы можете обратиться:

  1. Непосредственно через issues.

Лицензия: WWSearch лицензируется под Apache License Version 2.0. Подробные сведения о лицензии см. в LICENSE.TXT.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/Tencent-wwsearch.git
git@api.gitlife.ru:oschina-mirror/Tencent-wwsearch.git
oschina-mirror
Tencent-wwsearch
Tencent-wwsearch
master