Статьи

Документация

Дополнительно

Полнотекстовый поиск

Полнотекстовый поиск определяется, как поле Field::FullTextView.

Пример определения:

search::Configuration _search;

Field::FullTextView("tsv", db::FullTextViewFn([this] (const db::Scheme &scheme, const db::Value &obj) -> db::FullTextVector {
    size_t count = 0;
    db::FullTextVector vec;

    count = _search.makeSearchVector(vec, obj.getString("key"), db::FullTextRank::A, count);
    for (auto &it : obj.getArray("text")) {
        count = _search.makeSearchVector(vec, it.getString(), db::FullTextRank::B, count);
    }

    return vec;
}),  db::FullTextQueryFn([this] (const db::Value &data) -> db::FullTextQuery {
    return _search.parseQuery(data.getString());
}), _search, Vector<String>({"key", "text"})),

Для работы полнотекстового поиска необходима функция FullTextViewFn. Она возвращает заполненный вектор поиска на основе исходного объекта, в котором будут включены определённые поля из списка.

Опциональная функция FullTextQueryFn определяет способ конвертации запроса к полю в полнотекстовый запрос.

Для запроса используется Query.

_scheme.select(_transaction, Query().select(tsv, "test fulltext \"query\""));

Стандартный способ разбора запроса соотвествует websearch_to_tsquery