Now it support only `String` and `FixedString`

https://github.com/ClickHouse/ClickHouse/blob/33aefa832b3c544934a757cc9d0e284252a1dd3e/src/Storages/MergeTree/MergeTreeIndexFullText.cpp#L809

Seems that `LowCardinality(String)` can be supported too, because we only use `column->getDataAt` to retrieve data and it will work on `LowCardinality(String)` in same way as for `String`
https://github.com/ClickHouse/ClickHouse/blob/33aefa832b3c544934a757cc9d0e284252a1dd3e/src/Storages/MergeTree/MergeTreeIndexFullText.cpp#L543
https://github.com/ClickHouse/ClickHouse/blob/33aefa832b3c544934a757cc9d0e284252a1dd3e/src/Storages/MergeTree/MergeTreeIndexFullText.cpp#L145
{
                if (traverseASTEquals(function->name, arguments[0], const_type, const_value, out))
                    return true;
            }
            else if (KeyCondition::getConstant(arguments[0], block_with_constants, const_value, const_type) && (function->name == "equals" || function->name == "notEquals"))
            {
                if (traverseASTEquals(function->name, arguments[1], const_type, const_value, out))
                    return true;
            }
        }
    }
    return false;
}
bool MergeTreeConditionFullText::traverseASTEquals(
    const String & function_name,
    const ASTPtr & key_ast,
    const DataTypePtr & value_type,
    const Field & value_field,
    RPNElement & out)
{
    auto value_data_type = WhichDataType(value_type);
    if (!value_data_type.isStringOrFixedString() && !value_data_type.isArray())
        return false;
    Field const_value = value_field;
    size_t key_column_num = 0;
    bool key_exists = getKey(key_ast->getColumnName(), key_column_num);
    bool map_key_exists = getKey(fmt::format("mapKeys({})", key_ast->getColumnName()), key_column_num);
    if (const auto * function = key_ast->as<ASTFunction>())
    {
        if (function->name == "arrayElement")